c - 围绕 .lib 文件编写与 GCC 兼容的包装器

标签 c windows visual-c++ gcc mingw

最近收到一个闭源SDK,由C头文件(.h)、库文件(.lib)、动态库(.dll)。它们是使用 Microsoft 的 Visual C++ 编译的。但是,我正在尝试使用 MinGW(GCC 移植到 Windows,对于不熟悉该项目的任何人)编写我的代码。 ld 似乎无法链接到 .lib 文件。我想知道是否可以在 VS 编译代码和我正在编写的 GCC 代码之间编写一个兼容性包装器。

最佳答案

是否存在 ABI 不匹配或者只是不想链接到对象格式?如果它只是一个链接问题,你可以提取你关心的函数,反汇编它们,然后将它们重新组装成一个你的链接器可以处理的对象。更容易,也许objcopy(1)可以说两种格式并且可以帮助您吗?

如果您确实有 ABI 问题需要处理,您可以执行相同的操作,但还可以添加一个填充层来对 ABI 进行 thunk,以便函数调用能够正常工作。该层有多复杂以及编写起来有多困难将取决于您尝试使用的函数的接口(interface)。

不要因为评论而气馁 - 它是软件,所以几乎一切都是可能的。

关于c - 围绕 .lib 文件编写与 GCC 兼容的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383451/

相关文章:

c - 在C程序中动态查找数组长度而不使用sizeof

在 Eclipse 中使用 ANSI 编译 C 代码

c++ - 我想学习Visual C++游戏开发?

visual-studio-2010 - Notepad++ 构建失败,并显示消息 PostBuildEvent : The system cannot find the file specified

c++ - 在编译时为 libcurl 定义 CA 信息

windows - 通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1)

c++ - 我听说 i++ 不是线程安全的,++i 是线程安全的吗?

c - 为什么我的 write 函数打印一个字符串(到 stdout)将随机字符附加到输出?

windows - 在 .cmd 中使用 Windows 命令测试是 32 位还是 64 位并运行命令

c++ - C++ 中 SetProcessAffinityMask 的示例用法?