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

Posted

技术标签:

【中文标题】是否有可以将 Visual Studio 目标文件转换为 GCC 格式的工具?【英文标题】:Is there a tool that can convert a Visual Studio object file to GCC format? 【发布时间】:2013-03-28 22:41:43 【问题描述】:

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

【问题讨论】:

这是一件非常困难的事情。 除了名称修改之外,还有很多不同之处。最好忘记它,您将有更多机会向第三方询问代码,以便您自己编译它,或者询问 GCC(MinGW?)目标文件。不要忘记明确说明您的 GCC/MinGW 版本以确保 ABI 兼容性。 最简单的解决方案是获取 Visual C++ Express Edition,并将目标文件包装在具有 C 接口的 DLL 中。 Windows 上的 GCC 明白这一点;操作系统毕竟是作为带有 C 接口的 DLL 提供的。 @MSalters 听起来你已经有了答案!请您详细说明细节并添加答案吗? 【参考方案1】:

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 符号。

【讨论】:

如果您沿着这条路走下去,您可能会发现其中的一些 ***.com/questions/2045774/… 很有帮助(免责声明 - 接受的答案是我的...)【参考方案2】:

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

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

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

【讨论】:

以上是关于是否有可以将 Visual Studio 目标文件转换为 GCC 格式的工具?的主要内容,如果未能解决你的问题,请参考以下文章

如果无法创建 vcxproj 文件,是不是可以将 MSBuild 用作带有 Visual Studio 代码的 C++ 编译器?

Visual Studio:将依赖的 DLL 复制到目标文件夹

是否可以将项目直接从 Visual Studio 导出到它自己的文件夹中?

是否有任何 Visual Studio 插件可以自动格式化我喜欢的代码?

是否可以将 Visual Studio 配置为每次从其中一个项目打开文件时不更改启动项目?

将目标更改为 x64 会破坏 Visual Studio 2017 中的 FLTK 构建