2014-02-08 327 views
-1

我得到了一個使用在Windows 8上編譯的.dll的程序。當我將程序及其.dll移動到Windows 7時,程序崩潰。這一定是因爲DLL編譯配置我猜。在Windows 8中編譯的DLL在Windows 7中不起作用

下面是.dll

#pragma once 

#ifdef __cplusplus 
extern "C" { 
#endif 

    void myFunc(void); 

#ifdef __cplusplus 
} 
#endif 

的頭文件我試過的Dependency Walker,但不明白它的一部分。在Windows 8中,dll有一些缺失的依賴關係,但運行良好。在Windows 7中,該dll缺少的依賴是不同

該程序正在使用TDM MinGW的(它有),而DLL是使用Visual Studio 2013

+0

使用編譯'-static -static-libgcc的-static-的libstdC++' – Brandon

+0

@CantChooseUsernames使錯誤行304:問題編譯:mingw32的-G ++:錯誤:無法識別的選項 '-static-的libstdC++' –

+0

你能緊靠更精確「崩潰」的性質?例如,報告哪些錯誤消息?無法加載或鏈接庫時是否真的崩潰或中止? – Clifford

回答

1

難怪編譯編譯。 C++語言的變化往往會迫使ABI的差異(庫不再兼容)。操作系統也有些不同...

+0

感謝您的回覆。所以我該怎麼做?任何建議? –

1

C++用於支持類成員資格和函數重載的名稱修改過程因編譯器而異。從不保證(並且事實上不太可能)在一個編譯器中編寫的DLL中的C++符號將匹配在不同編譯器中生成的符號。

查看this on name mangling瞭解詳情。最終,無論崩潰的實際原因如何,爲DLL和應用程序代碼使用不同的編譯器可能都是不安全的。

您需要在整個過程中使用相同的編譯器,或者使用C鏈接提供DLL API。

+0

在這種情況下,我不能使用相同的編譯器。將嘗試使用C鏈接的DLL API。謝謝 –

+0

@ mnaim86:我的錯誤,你的頭文件顯示你已經在使用C鏈接了(這就是'extern「C」'的用途)。 – Clifford

相關問題