我正在使用 Interix 在 Windows 上构建 C++ 应用程序,需要链接三个目标文件以提供第三方许可模块的功能。第三方提供了由 Visual Studio 构建的目标文件。无论如何转换文件以供 GCC 使用?例如,如果我将名称修改从 Visual Studio 样式更改为 GCC 样式就足够了,或者这两种目标文件格式之间是否存在其他差异?
2 回答
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 符号。
除了 VC++ 和 GCC/G++ 之间可能存在的符号差异之外,由于 Windows API 问题,您尝试做的事情可能是不可能的。
从 Interix GCC 构建的程序只能与 Interix 一起使用,并且由于 Interix 是与 Windows 子系统(或说 Win32 子系统)并行的独立子系统,因此您不能从 Interix 调用任何 Windows API(例如来自 kernel32.dll)程式。
如果该许可对象文件包含任何 Windows API 调用,则无法进行链接。