LDR: LdrpWalkImportDescriptor()解決方案

來源:互聯網
上載者:User

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


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

然後再調試輸出資訊中查看得到如下資訊:

LDR: LdrpWalkImportDescriptor() failed to probe F:\......\libpng.dll for its manifest, ntstatus 0xc0150002  調試器:: 在進程載入過程中引發了未處理的無法繼續的異常  程式“[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(個人比較推薦這種方式)。

因此,我們以後在發布程式時也需要注意這樣的問題,以免出現這樣的不相容的情況。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.