gpt4 book ai didi

visual-c++ - 使用 MinGW 工具创建 MSVC 导入库

转载 作者:行者123 更新时间:2023-12-02 02:59:06 34 4
gpt4 key购买 nike

我们目前正在将跨平台(linux、osx、w32)项目的 W32 构建过程从 VisualStudio 切换到 mingw。

我们面临的问题之一是,我们的项目创建了一个动态库 ( foo.dll ),第三方项目可以链接到该库。要使其在 W32/MSVC 上工作,需要一个导入库 ( foo.lib )。

现在,关注 the documentation创建一个包含导入库所需的所有信息的 .def 文件非常容易:

 gcc -shared -o foo.dll foo-*.o -Wl,--output-def,foo.def

为了使用 foo.def文件,文档告诉我使用 Microsoft LIB 工具来构建 foo.lib从中:
 lib /machine:i386 /def:testdll.def

这显然要求我在构建计算机上安装(一部分)MSVC。
但是,我们想在我们的 linux 系统上(甚至可能在某些 CI 上)交叉编译整个东西,这使得 MSVC 的安装相当乏味。

所以我想知道,是否有一种原生的 MinGW 方式来转换 foo.def文件变成 foo.lib导入库?

(我们知道最终只有 MSVC 用户需要导入库,并且他们会准备好 lib 工具。但是,由于我们一直提供 foo.lib 文件,因此切换到 foo.def会破坏第 3 方构建系统——这是我们希望避免的)。

最佳答案

要生成类似于 Microsoft 的 link.exe 生成的导入库,您可以使用 llvm-dlltool(LLVM 编译器项目的一部分):

llvm-dlltool -m i386:x86-64 -d foo.def -l foo.lib

替代 i386:x86-64i386如果您想创建一个 32 位库。有关更多详细信息,请参阅此对 How to generate an import library (LIB-file) from a DLL? 的回答.

请注意,某些 MinGW 项目会生成一个 .dll.a 文件(由 binutils dlltool 生成)。虽然这可以重命名为 .lib 并用作导入库,但我发现如果 MSVC 项目链接到多个 .dll.a 库,它会导致二进制文件损坏。所以坚持使用 llvm-dlltool 来提高兼容性。

关于visual-c++ - 使用 MinGW 工具创建 MSVC 导入库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541722/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com