在Windows 8中编译的DLL在Windows 7中不起作用

时间:2014-02-08 16:24:09

标签: c++ windows dll

我有一个程序使用在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

2 个答案:

答案 0 :(得分:1)

难怪。 C ++语言的变化往往会强制ABI差异(库不再兼容)。操作系统也(有些)不同......

答案 1 :(得分:1)

C ++用于支持类成员资格的名称修改过程和编译器之间的函数重载不同。从不保证(并且实际上不太可能)在一个编译器中编写的DLL中的C ++符号将匹配在不同编译器中生成的符号。

有关详细信息,请参阅this on name mangling。最终,无论崩溃的实际原因是什么,对DLL和应用程序代码使用不同的编译器可能都是不安全的。

您需要始终使用相同的编译器,或者提供带有C链接的DLL API。