最近收到一个闭源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/