Windows下程序启动时出现0xc000007b错误的解决方案
一、背景介紹
? ? ? 不久前用Qt開發(fā)了一款小工具在公司使用,Debug運(yùn)行時(shí)一切正常。可是當(dāng)Release編譯發(fā)布打包之后,運(yùn)行時(shí)彈出這樣的提示框:
? ? ? 略一思考,首先排除了DLL缺失的可能性。我知道Qt應(yīng)用程序在發(fā)布的時(shí)候,需要將相關(guān)DLL都拷貝到同一個(gè)目錄下,還得把平臺(tái)插件文件夾也加進(jìn)來。因此,整個(gè)發(fā)布后的程序組織結(jié)構(gòu)如下:
? ? ? 因此排除了DLL缺失的問題。那么可能是什么原因呢?在Google中搜索錯(cuò)誤代碼0xc000007b,不少帖子提示是庫(kù)的版本不一致。有可能是因?yàn)樵?4位程序中引用了32位的庫(kù),或者在32位的程序中引入了64位的庫(kù)導(dǎo)致出錯(cuò)的。怎么確定呢?使用Dependency Walker即可查看:
? ? ? 可以看到,我的程序是64位版本的,但是確實(shí)引用了兩個(gè)32位的庫(kù)。那么,知道了原因了就好辦了。
二、解決方案
?(1)方案一:方法比較簡(jiǎn)單,將32位的庫(kù)都替換成64位的庫(kù)。這個(gè)通過設(shè)置VS的鏈接器選項(xiàng)就可以完成。一般是因?yàn)榇中亩鴮?dǎo)致鏈接到了版本不一致的庫(kù),但是在Debug和編譯時(shí)都不報(bào)錯(cuò),略感無語。
?(2)方案二:對(duì)于第一種方案不適用的情況,必須采用第二種方案了。本人在第二種情況中糾纏了多時(shí)。經(jīng)過反復(fù)確認(rèn),工程類型設(shè)置成了X64類型,庫(kù)也替換成了x64的,但是編譯出來的程序中總會(huì)鏈接到32位的庫(kù)。這樣,不管我怎么編譯修改,仍然還是彈出0xc000007b錯(cuò)誤提示框。解決方法是:修改工程的manifest文件。
? ? ? 像這樣:把processorArchitecture都修改成amd64,重新編譯程序后鏈接的就是64位的庫(kù)了。僅僅只要修改這兩個(gè)地方,如果改動(dòng)其他地方,可能導(dǎo)致程序出錯(cuò):
三、參考鏈接
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
轉(zhuǎn)載于:https://www.cnblogs.com/csuftzzk/p/windows_launch_error_0xc000007b.html
總結(jié)
以上是生活随笔為你收集整理的Windows下程序启动时出现0xc000007b错误的解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C C++ 语法
- 下一篇: OpenCV circle函数