3

我正在使用 Interix 在 Windows 上构建 C++ 应用程序,需要链接三个目标文件以提供第三方许可模块的功能。第三方提供了由 Visual Studio 构建的目标文件。无论如何转换文件以供 GCC 使用?例如,如果我将名称修改从 Visual Studio 样式更改为 GCC 样式就足够了,或者这两种目标文件格式之间是否存在其他差异?

4

2 回答 2

4

Windows 没有标准化的 C++ ABI(应用程序二进制接口)。不过,它确实有一个 C ABI。这是例如 使用的 ABI Kernel32.DLL,因此所有 Windows 编程环境都可以理解它。许多人还可以生成这样的 DLL。

在这种情况下,C++ .obj 文件必须由 Visual Studio 链接器链接。该链接器绝对能够创建 DLL 文件。您必须编写extern "C"函数来包装许可功能。添加__declspec(dllexport)表示这些函数是从 DLL 导出的(在 Windows 上,函数默认情况下是 DLL 私有的)。

在标头中,声明与__declspec(dllimport). GCC 也明白这一点。然后链接到新生成的 DLL,它将解析dllimport'ed 符号。

于 2013-04-02T06:40:37.743 回答
1

除了 VC++ 和 GCC/G++ 之间可能存在的符号差异之外,由于 Windows API 问题,您尝试做的事情可能是不可能的。

从 Interix GCC 构建的程序只能与 Interix 一起使用,并且由于 Interix 是与 Windows 子系统(或说 Win32 子系统)并行的独立子系统,因此您不能从 Interix 调用任何 Windows API(例如来自 kernel32.dll)程式。

如果该许可对象文件包含任何 Windows API 调用,则无法进行链接。

于 2018-12-29T05:58:31.860 回答