Windows下程序啟動時出現0xc000007b錯誤的解決方案


一、背景介紹

      不久前用Qt開發了一款小工具在公司使用,Debug運行時一切正常。可是當Release編譯發布打包之后,運行時彈出這樣的提示框:

      略一思考,首先排除了DLL缺失的可能性。我知道Qt應用程序在發布的時候,需要將相關DLL都拷貝到同一個目錄下,還得把平台插件文件夾也加進來。因此,整個發布后的程序組織結構如下:

      因此排除了DLL缺失的問題。那么可能是什么原因呢?在Google中搜索錯誤代碼0xc000007b,不少帖子提示是庫的版本不一致。有可能是因為在64位程序中引用了32位的庫,或者在32位的程序中引入了64位的庫導致出錯的。怎么確定呢?使用Dependency Walker即可查看:

      可以看到,我的程序是64位版本的,但是確實引用了兩個32位的庫。那么,知道了原因了就好辦了。

二、解決方案

 (1)方案一:方法比較簡單,將32位的庫都替換成64位的庫。這個通過設置VS的鏈接器選項就可以完成。一般是因為粗心而導致鏈接到了版本不一致的庫,但是在Debug和編譯時都不報錯,略感無語。

 (2)方案二:對於第一種方案不適用的情況,必須采用第二種方案了。本人在第二種情況中糾纏了多時。經過反復確認,工程類型設置成了X64類型,庫也替換成了x64的,但是編譯出來的程序中總會鏈接到32位的庫。這樣,不管我怎么編譯修改,仍然還是彈出0xc000007b錯誤提示框。解決方法是:修改工程的manifest文件。

      像這樣:把processorArchitecture都修改成amd64,重新編譯程序后鏈接的就是64位的庫了。僅僅只要修改這兩個地方,如果改動其他地方,可能導致程序出錯:

三、參考鏈接

1. http://blog.csdn.net/vbcom/article/details/7245186

2. https://msoos.wordpress.com/2010/09/11/0xc000007b-error-solution/

3. http://stackoverflow.com/questions/10492037/the-application-was-unable-to-start-correctly-0xc000007b

4. https://social.msdn.microsoft.com/Forums/en-US/c0bc5e8e-1b17-40e2-9476-c1900b5b04ea/comctl32dll-64-bit-version?forum=netfx64bit

5. http://stackoverflow.com/questions/24148196/incorrect-comctl32-dll-is-loaded-after-porting-a-project-from-win32-to-x64-platf


免責聲明!

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



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