我有一个程序使用在Windows 8上编译的.dll。当我将程序及其.dll移动到Windows 7时,程序崩溃了。它必须是因为DLL编译配置我猜。
以下是.dll
的头文件的一部分#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void myFunc(void);
#ifdef __cplusplus
}
#endif
我尝试过Dependency Walker,但不明白。在Windows 8中,dll有一些缺少的依赖项,但运行良好。在Windows 7中,dll缺少依赖项是不同的
使用TDM MinGW(必须)编译程序,而使用Visual Studio 2013编译DLL
答案 0 :(得分:1)
难怪。 C ++语言的变化往往会强制ABI差异(库不再兼容)。操作系统也(有些)不同......
答案 1 :(得分:1)
C ++用于支持类成员资格的名称修改过程和编译器之间的函数重载不同。从不保证(并且实际上不太可能)在一个编译器中编写的DLL中的C ++符号将匹配在不同编译器中生成的符号。
有关详细信息,请参阅this on name mangling。最终,无论崩溃的实际原因是什么,对DLL和应用程序代码使用不同的编译器可能都是不安全的。
您需要始终使用相同的编译器,或者提供带有C链接的DLL API。