轉載請注明出處!
本文參考過其他一些文章:
http://www.cnblogs.com/csuftzzk/p/windows_launch_error_0xc000007b.html
這個問題在網上一查一大堆,主要的原因就是庫文件版本的問題,比如說x64的程序引用了x86的庫;網上提出了一些方法,比如說:
1)安裝DirectX9修復軟件;百度百科的介紹:"主要功能是檢測當前系統的DirectX狀態,如果發現異常則進行修復。程序主要針對0xc000007b問題設計,且包含了最新版的DirectX redist(Jun2010),並且全部DX文件都有Microsoft的數字簽名。其中的標准版以及增強版都包含完整的DirectX組件。除此之外,增強版中還額外包含了c++ Redistributable Package,因此增強版不但能解決DirectX組件的問題,而且還能解決c++組件異常產生的問題。增強版適合無法自行解決c++相關問題的用戶使用。在線修復版的功能與標准版相同,只是其所需的文件將通過Internet下載,因此大大減小了程序的體積。本程序的各個版本之間,主程序完全相同,只是配套使用的數據包不同。因此,當您使用標准版數據包時,程序將進行標准修復;當您使用增強版的數據包時,程序將進行增強修復;當數據包不全或沒有數據包(即只有DirectX Repair.exe程序)時,程序將進行在線修復。在線修復、離線修復可自由靈活組合,充分滿足不同用戶的需要。"
2)下載某些庫(......),放到System32目錄或者SysWOW64下面;
對於我的問題,
問題(1)VS2015創建的C++控制台應用程序無法運行(在x86 debug,/MDd模式下無法運行):

於是我設置工程->屬性->C/C++->代碼生成->運行庫->/MTd;程序就能正常運行了!查了一下:http://blog.csdn.net/zhangla1220/article/details/50033541,發現這個問題還是和庫是有關的:多線程調試Dll (/MDd) 對應的是MD_DynamicDebug,多線程(/MTd)對應的是MD_StaticDebug 一個是動態鏈接,一個是靜態鏈接;選擇動態鏈接庫時,出現0xc000007b問題,說明還是dll的版本問題,但是具體是哪個dll有問題呢?
這個時候,我們要用到一個軟件,叫做Depends Walker;這個軟件可以檢測一個應用程序使用了哪些動態鏈接庫!對於一個剛剛的這個工程:
#include <iostream>
using namespace std;
int main()
{
cout << "-------------" << endl;
getchar();
return 0;
}
在我另一台電腦的VS2015軟件上選擇MDd運行庫,debug、x86,程序能正常運行,將debug目錄下生成的*.exe文件拖到Depends Walker軟件上,分析結果如下:

但是,在不能正常運行的平台下運行生成的exe文件經過depends分析,得到的是下面的結果:

所以,需要做的就是,將這些x64的庫文件刪除,替換成x86的版本就可以運行了!
問題(2)opencv程序中出現0xc000007b問題(其他不使用OpenCV庫的簡單c++控制台工程不出現0xc000007b問題的情況):
這個問題我解決的辦法是修改環境變量:
一般來說:安裝完opencv后會配置環境變量,配置如下兩個目錄:
D:\opencv_2_4_11\opencv\build\x86\vc12\bin
D:\opencv_2_4_11\opencv\build\x64\vc12\bin
這兩個目錄下的庫文件名是一樣的,因此同時配置很可能出現0xc000007b問題;比如說將x86目錄配置在x64目錄之前,建立的工程選擇x64的解決方案平台:

這樣就會出現這個問題,因為會先在x86的目錄下找到dll文件。解決方法是將相應的目錄提前或者刪除另一個目錄
