又遇Release編譯的一坑 -- 應用程序正常初始化(0xc000007b)失敗。請單擊“確定”,終止應用程序。


       項目中使用了xlslib庫,以動態庫形式編譯,由於它沒有生成鏈接庫lib文件,所以官方提供的demo中有createDLL這個小程序用來生成lib文件。然而我又 no zuo no die了一次。
        為了使生成程序文件夾只包含exe和dll以及其他必要文件,我修改了項目配置
 然后發現生成的dll文件在兩個文件夾中居然不是一樣的大小,具體vs做了些什么
         當然,這是事后發現的,編譯都沒有問題,而Release下運行正常,Debug一運行就出現
 
 比對各種配置,依然沒有發現問題。。。然后想到用 depends 查看一下不同版本二進制文件動態庫依賴有沒有問題。
Release:
 Debug
 發現Release版居然沒有鏈接xlslib_dll.dll這個動態庫,而源代碼中
   
   
   
           
  1. CDataManager *CDataManager::Instance() {
  2. static CDataManager *instance = NULL;
  3. if (!instance) {
  4. //StandardTest("adfesa");
  5. instance = new CDataManager();
  6. }
  7. return instance;
  8. }
調用xlslib_dll.dll進行測試的地方(StandardTest)是被注釋掉的,所以我懷疑是Release版編譯器檢查到動態庫中的函數沒有被使用過所以直接不鏈接該動態庫,而Debug版中沒有進行此項優化。於是將代碼注釋去掉,果然,這次Release版運行也出現如上錯誤。
發現這個情況后才開始看xlslib_dll的問題,然后發現兩個文件夾中該文件的大小是不一樣的。然后將intermediate目錄中的該文件覆蓋到bin目錄中,居然能正常運行。。。而且depends查看也鏈接正常
 所以,有時候 VS 給出警告提示
   
   
   
           
  1. 2>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(F:\Projects\RFIDRecorder\intermediate\xlslib_dll\xlslib_dll.dll) does not match the Linker's OutputFile property value (F:\Projects\RFIDRecorder\bin\xlslib_dll.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
不要完全忽視。。。。雖然還是不懂為什么不直接將OutDir中的文件拷貝到Output,找到問題就知道怎么解決了,還是把General中的OutDir和Linker中的設置一致吧,總結一句:FUCK,浪費好多時間,也算吃一塹了。0xc000007b這個錯誤的原因應該是需要鏈接的動態庫存在,但是與程序需要的不一致導致的。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM