• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2015年8月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

               今天編譯完CEGUI后運行時提示我缺少MSVCP80D.DLL,搜了下找到了解決方案 備忘.


               在VS 2005中建立Win32工程時(以VS 2005中文版為例),你可能會遇到這樣的運行錯誤:“沒有找到MSVCP80D.dll,因此這個應用程序未能啟動。重新安裝應用程序可能會修復此問題。”(還可能是其它幾個類似的文件:MSVCR80D.dll、MSVCM80D.dll)。對于VS2005新手,可能遇到的第一個問題便是此問題。
            一直使用VC6進行開發測試,最近準備把平臺轉移到VS2005(過些天就應該轉VS2008了,呵呵)上來。于是,決定先把CppUnit轉移到此平臺上來。在VS2005中編譯CppUnit所遇到的問題不多,雖然沒VC6方便。但是在測試編譯好的CppUnit庫時卻遇到了困難:把以前在VC6中寫的AES移植過來(其使用了CppUnit進行單元測試),在運行時卻遇到了如上錯誤。剛開始以為可能是CppUnit沒有編譯好,重新編譯CppUnit多次,調整編譯參數,但始終有此錯誤,并且此錯誤有時出現有時不出現,這更暈了,大量時間就這樣浪費了。等我靜下來,才覺得可能是VS 2005的原因,于是上網搜索此錯誤信息,終于找到了問題所在。

            VS 2005在生成可執行文件時使用了一種新的技術,該技術生成的可執行文件會伴隨生成一個清單文件(manifest
            file)(.manifest后綴文件)(其本質上是XML文檔,你可以用文本編輯器打開看看),并在鏈接完成后將該清單文件嵌入到exe文件中(默認情況下)。而在FAT32文件系統中,在處理清單文件階段,當增量鏈接時不能完成清單文件的更新(默認情況下),于是造成清單文件嵌入失敗,從而使該exe文件運行時沒有相應的清單文件而運行失敗并提示如上錯誤。

            解決方案很多,列舉如下:
            1. 由于這是在鏈接動態運行庫出現的問題,所以你可以選擇代碼生成的連接方式為/MTd而非/MDd,不用這些DLL文件從而避免問題的出現。該方法有一個很顯然的缺點:適用范圍有限,并且也不是我等提倡的解決問題的方式,不推薦該方法。

            2. 既然跟FAT32系統有關,那么我們可以選擇在NTFS文件系統中開發從而避免該問題,此方法同上,也是采用的回避問題的方式,不為我等提倡。

            3. 該方法仍與FAT32有關:在項目的“屬性|配置屬性|清單工具|常規”中的“使用FAT32解決辦法”選擇“是”(默認為“否”),重新生成項目即可解決問題。該方法是唯一真正針對問題所在而提出的解決方法,使清單工具可以正確更新。(此方法是官方解決方法,也比較方便,推薦)

            4. 既然問題是在更新嵌入的清單文件時發生的,由于FAT32的原因而未能更新嵌入的清單文件,于是我們有如下兩種解決方法:
            (1)不啟用增量鏈接。在項目的“屬性|配置屬性|鏈接器|常規”中的“啟用增量鏈接”選擇“否”。此方法阻斷了問題產生的源頭,其每次生成exe文件時都直接嵌入清單文件,而不是默認的根據時戳而決定是否更新清單文件。
            (2)不嵌入清單文件。在項目的“屬性|配置屬性|清單工具|輸入和輸出”中的“嵌入清單”選擇“否”,從而在生成exe文件時附隨生成一個清單文件(默認情況下,其文件名為exe文件的全名加上“.manifest”),避免了嵌入清單文件可能失敗的問題。在程序運行時,會用到該清單文件。顯然,這種方式使可執行程序產生了更多的外部依賴,不推薦。

            另外,還有一個不能稱為方法的土辦法:每次Build前手動刪除*.ilk文件(增量鏈接文件)(當然可以在項目屬性中寫入刪除命令,使其自動執行),不推薦該土辦法。

            最后,總結一下:
            1. 此問題只在特定條件下才會出現:在FAT32文件系統中編譯、默認設置(增量模式、不啟用FAT32解決方案、嵌入清單文件)、非第一次生成可執行文件文件(即在增量連接、更新清單文件時)。
            2. 解決方案1和4.1方便實用,推薦使用。


               今天編譯程序的時候,總是提示LINK : fatal error LNK1000: Internal error during IncrBuildImage

            后在網上找到達人的解釋說,可以下載補丁解決(覺得不靠譜),或者只要“修改鏈接選項,方法:項目-屬性-鏈接器-常規 下面的“啟用增量鏈接”,將“是(/INCREMENTAL)”改為“否(/INCREMENTAL:NO)”,然后確定就可以了解決了”,試了下,果然可以。

                  可是我還是不知道增量是什么東東,又搜了下,在愛問上找到了答案:

                  現在的VS2003,2005,2009有增量編譯功能,就是如果你的代碼改動了,他們是不完全重新編譯整個代碼的,而是只編譯你所更改的部分。    出現這個提示, 
                 1.你是第一次進行編譯,這時當然沒有生成過可執行文件,也就無法增量鏈接了。 
                 2.你上一次編譯的時候有錯誤,沒有生成可執行文件。

            posted on 2011-01-28 13:41 風輕云淡 閱讀(428) 評論(0)  編輯 收藏 引用 所屬分類: 日常問題
            国色天香久久久久久久小说 | 99久久精品免费观看国产| 激情伊人五月天久久综合| 国产午夜精品理论片久久影视| 久久电影网2021| 香蕉久久夜色精品国产尤物| 国产精品99精品久久免费| 免费国产99久久久香蕉| 久久亚洲AV成人无码软件| 久久亚洲高清观看| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久久久国产精品麻豆AR影院| 天天做夜夜做久久做狠狠| 97热久久免费频精品99| 亚洲精品国产自在久久| 精品国产91久久久久久久a | 精品久久久久久无码人妻蜜桃| 一本色道久久88—综合亚洲精品| 久久久久亚洲AV无码去区首| 久久综合欧美成人| 国产精品美女久久久久| 亚洲精品tv久久久久久久久| 亚洲欧美成人久久综合中文网| 94久久国产乱子伦精品免费| 91精品国产综合久久精品| 欧美噜噜久久久XXX| 国产精品中文久久久久久久| 久久人人爽人人爽人人片AV麻豆| 久久综合九色综合欧美狠狠| 久久精品视频网| 日本道色综合久久影院| .精品久久久麻豆国产精品| 色欲综合久久中文字幕网| 久久国产欧美日韩精品| 国色天香久久久久久久小说| 亚洲精品美女久久久久99| 久久久无码精品亚洲日韩按摩| 97久久精品无码一区二区天美| 少妇高潮惨叫久久久久久| 国产亚洲精品美女久久久| 亚洲国产精品久久久久婷婷老年 |