程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> LDR: LdrpWalkImportDescriptor()解決方案

LDR: LdrpWalkImportDescriptor()解決方案

編輯:關於C語言

今天編譯一開源項目,他提供的是VC9的工程,我這邊是VC10,首先,打開之後需要經過轉換,一切正常,然後編譯,出現一個簡單的小的錯誤,更改之後編譯通過,但是運行時出現下圖所示的錯誤。

“應用程序正常初始化oxc0150002)”失敗,請單擊“確定”,終止應用程序。

然後再調試輸出信息中查看得到如下信息:

  1. LDR: LdrpWalkImportDescriptor() failed to probe F:\......\libpng.dll for its manifest, ntstatus 0xc0150002  
  2. 調試器:: 在進程加載過程中引發了未處理的無法繼續的異常  
  3. 程序“[1964] Helloworld-win32.exe: 本機”已退出,返回值為 -1072365566 (0xc0150002)。 

這種情況到時比較多見了,一般都是鏈接庫的問題,網上問這個問題的也很多,這裡就給說明一下。出錯信息說是libpng.dll的問題,那麼我們就打開這個dll來檢查一下吧。下圖是該dll的版本信息:

基本上這版本信息上也看不出什麼錯誤來,下面就只能查看該DLL的二進制信息了,打開之後,終於發現問題了,如下圖所示:

選中的部分其中包含了“name="Microsoft.VC90.DebugCRT" version="9.0.21022.8"”,這裡的name值說明編譯該DLL是使用的VC9.0而且還是Debug版本的,而version值則是一個版本號,還真有些郁悶了,既然是發布,為什麼還要編譯Debug版本的呢?Debug版本需要環境高度一致才能兼容,release版本則不會有這些問題存在,如何解決這個問題呢?

方法一:卸載VC10,改裝VC9,這個比較麻煩,不考慮了。
方法二:將對應版本的“Microsoft.VC90.DebugCRT”拷貝到system32中,一般位於VC的安裝目錄中的redist文件夾下,如下圖所示,選中的Debug_NonRedist其下的x64和x86)表示是Debug版本使用的,而另外兩x64和x86則是release版本的。這裡的截圖暫時還是VC10的,路徑為:Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist\x86

方法三:直接找到libpng的源代碼,自己來編譯DLL個人比較推薦這種方式)。
因此,我們以後在發布程序時也需要注意這樣的問題,以免出現這樣的不兼容的情況。

本文出自 “yarin's blog™” 博客,請務必保留此出處http://yarin.blog.51cto.com/1130898/422187

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved