2010-08-16 67 views
0

我收到一個錯誤消息,說「應用程序無法正確啓動(0xc000007b)。單擊確定關閉應用程序。」當我嘗試運行一個程序時,我用Visual Studio 2005進行了編譯。x86 AMD64 DLL問題 - Visual Studio 2005?

當我運行windows程序「依賴」這個可執行文件時,我看到一個TON的DLL被列爲「x86」dll。這些都顯示爲OS DLL(位於c:\ windows \ system32目錄中)。 「取決於」在描述架構時將它們列爲紅色,因爲我正在製作AMD64二進制文件。一些DLL(我從源代碼編譯的QT dll)被列爲AMD64。

我曾嘗試在「c:\ windows \ system32」之前的路徑中添加「c:\ windows \ SysWOW64」並重建我的應用程序。這看起來像我這些DLL的64位版本生活的地方。這仍然收到相同的失敗消息。我的項目設置爲x64項目。在我的項目 - >屬性 - >鏈接器 - >高級 - >目標機器下,我嘗試了「MachineX64」和「未設置」。當我嘗試運行我的可執行文件時,這兩個設置在運行時都會導致相同的錯誤消息。

我不是很瞭解在windows環境中構建軟件。我的大部分經驗來自Linux。對我來說,這似乎是一個DLL架構問題,但我不確定。 Google'這個錯誤信息並沒有提供給我很多有用的信息。任何幫助提供將非常感激。我剛開始一個新的工作,看起來像我有很多很多的問題,當涉及到實際運行我們的代碼...

感謝您百忙之中抽出時間來閱讀我的問題,

-Brian J. Stinar-

首先,非常感謝您爲我提供反饋。

'set'爲我提供了以下信息,我相信這些信息可以幫助您回答一些問題。由於我對windows系統管理並不熟悉,請告訴我是否有其他命令,您認爲我應該運行它來爲您提供更多有用的信息。我相信輸出是從 '設置' 相關的是以下:

中的libversion = Win64的

PROCESSOR_ARCHITECTURE = AMD64

PROCESSOR_IDENTIFIER = Intel64位家族6模型26步進5,GenuineIntel

PROCESSOR_LEVEL = 6

PROCESSOR_REVISION = 1a05

在我的系統屬性下,我找到下面的值S的相信會有助於澄清我的情況:

Windows 7的

處理器:Intel(R)至強(R)CPU W3530 @ 2.80GHz的2.79 GHz的

系統類型:64位操作系統

我不完全相信我理解x64和ia64之間的區別,但據我所知,ia64是用於itanium類處理器的,我沒有。我相信我有一個x64處理器。這是根據閱讀

http://mikedimmick.blogspot.com/2006/03/whats-difference-between-x64-and-ia-64.html

至強處理器後落入64類。我不確定我是否理解AMD64如何適應這一點。

我是否應該連接AMD64 DLL,並且如果我實際上有英特爾至強芯片,我的程序是否應該列出CPU類型AMD64?

再次感謝你的幫助,

布賴恩J. Stinar-

+0

根據從平臺SDK err.exe,0xC000007b是STATUS_INVALID_IMAGE_FORMAT(或ERROR_INVALID_NAME)。所以是的,聽起來像是一個架構問題。你肯定在64位窗口上運行?你沒有混合x64和ia64? – Rup 2010-08-16 16:44:32

回答

0

有兩個DLL不正確。它們是:

libifcoremdd.dll libmmdd.dll

我今天對這個問題的一個同事工作,他複製了他們從他所知道的好位置。當我在一個不同的同事的早期工作時,我們從另一個地方複製了他們,結果證明這是不正確的。

此外,如果其他人是否有類似的問題,

dumpbin /headers DLLName 

會給很多關於你正在使用的DLL文件的有用信息。我不確定這些不同的DLL之間有什麼區別(我在檢查之前覆蓋了舊的DLL)。如果我對這個問題做了額外的分析,我會在這裏公佈結果。我懷疑DLL是x86或ia64,而不是像我需要的x64 DLL。

什麼是在Windows環境下打包和移動DLL這樣的最佳解決方案?只是將它們複製到我的路徑中的目錄似乎不是最好的解決方案。

非常感謝大家!

-Brian J. Stinar-

brian-stinar.blogspot.com

1

Syswow64資料就是32位DLL住在64位系統上。 ('WOW'是'Windows在Windows上',例如在64位窗口上的32位窗口DLL,所以SysWOW64是'在Windows64上用於Windows的系統文件夾')通常,程序運行時操作在Windows中會自動重定向在64位安裝中檢測到32位圖像。

我同意Rup--聽起來像你的圖像是爲不同的體系結構構建的,而不是你正在運行的。

+0

你好, 謝謝你爲我澄清SysWOW64。我正在慢慢成爲一名Windows程序員。 您是否有任何建議確保我的圖像(以及所有支持的DLL)是爲Visual Studio 2005中的正確體系結構構建的?我相信這是一個DLL問題,但我不確定。 此外,我能夠在發佈模式下完美運行,但不能在調試模式下運行。這也使我相信其中一個調試DLL被錯誤地構建。 我的'解決方案'一直將我的構建環境改爲虛擬機。顯然,這並不理想。 再次感謝你,我很感激。 – 2010-08-24 14:47:31

+0

當您構建Debug時,您確定解決方案中的任何項目都沒有將「x86」設置爲架構嗎?一切都應該作爲你的目標架構或'任何CPU'運行,不要混合。 – DaveE 2010-08-24 16:14:41

+0

因爲我指的是我的項目(DLL)以外的功能,我將來如何檢查這個功能?我爲x64設置了架構,但是我依賴的其他東西並不是以同樣的方式構建的。我不知道檢查這個的一般方法...謝謝! – 2010-09-07 18:21:49