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