一、背景介紹
不久前用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