是否有可以将Visual Studio对象文件转换为GCC格式的工具?

时间:2013-03-28 22:41:43

标签: c++ visual-studio gcc cross-compiling interix

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

2 个答案:

答案 0 :(得分:4)

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

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

在标题中,声明与__declspec(dllimport)相同的功能。海湾合作委员会也了解这一点。然后链接新生成的DLL,它将解析dllimport'ed符号。

答案 1 :(得分:1)

除了VC ++和GCC / G ++之间可能存在的符号差异外,由于Windows API问题,您正在尝试执行的操作也是不可能的。

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

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