我正在使用Interix在Windows上构建一个C++应用程序,需要链接三个对象文件来提供第三方许可模块的功能。第三方提供了由Visual Studio构建的对象文件。有没有办法把这些文件转换成和GCC一起使用?例如,也许如果我将名称mangling从Visual Studio样式更改为GCC样式就足够了,或者这两种对象文件格式之间还有其他区别吗?
发布于 2013-04-02 14:40:38
Windows没有标准化的C++ ABI (应用程序二进制接口)。不过,它确实有一个C ABI。这是Kernel32.DLL使用的ABI,所以所有的Windows编程环境都能理解它。许多人也可以生成这样的DLL。
在这种情况下,C++ .obj文件必须由Visual Studio链接器链接。该链接器绝对能够创建DLL文件。您必须编写extern "C"函数来包装许可功能。添加__declspec(dllexport)以指示这些函数是从DLL导出的(在Windows上,默认情况下,函数是DLL的私有函数)。
在标头中,将这些函数声明为__declspec(dllimport)。GCC也明白这一点。然后链接到新生成的DLL,它将解析dllimport'ed符号。
发布于 2018-12-29 13:58:32
除了VC++和GCC/G++之间可能存在的符号差异之外,由于Windows API问题,您正在尝试做的事情可能是不可能的。
从Interix构建的程序只能与Interix一起工作,并且由于Interix是与Windows子系统(或者说Win32子系统)并行的独立子系统,因此您不能调用任何Windows API (例如.从kernel32.dll)。
如果许可目标文件包含任何Windows API调用,则无法进行链接。
https://stackoverflow.com/questions/15693427
复制相似问题