对于 C++ Builder 的旧版
bcc64
64 位编译器,mkexp.exe
可用于导入库。要么我没有正确使用它,要么 mkexp.exe
输出文件与新的 Win64x (bcc64x
)(现代 - clang 15)编译器不兼容。
新编译器如何从
.lib
生成 .dll
?
我尝试了
mkexp.exe
(适用于旧的64位编译器的方式)。 Embarcadero wiki 没有提及任何有关为新目标生成 .lib
文件的内容。或者,如果它在任何地方都有记录,我找不到它。
最近的 Embarcadero 博客文章对此进行了解决:
创建 DLL 导入库
要导入随机DLL,您需要一个导入库。任何现有的 COFF 都应该与我们的链接器一起使用(这包括第三方为其 DLL 制作的导入库,旨在与 MSVC 一起使用。)
但是,如果您需要生成自己的,则首先需要 DLL 的定义 (.def) 文件。为此,您可以使用 LLVM-MinGW 中的 gendef.exe 文件。我们尚未发货,因此您需要下载它。请注意,以下内容是第三方的,未经我们验证或病毒检查,但officialllvm-mingw网站推荐Martin Storsjö的github进行发布。一个版本是:https://github.com/mstorsjo/llvm-mingw/releases/tag/20220906
找到 gendef.exe 的副本后,运行:
gendef file.dll
这将创建 file.def。
注意:有些人发现.def 文件中的文件名不正确。 .def 文件是纯文本:您可以打开它并确保它包含 LIBRARY
.dll,其中 可能是错误的:我们只看到“a”而不是实际的 DLL 名称。 然后,您可以使用我们的新链接器生成导入库(在 RAD Studio 命令提示符下运行它,或在普通命令提示符下运行 rsvars.bat):
ld.lld.exe -m i386pep --out-implib file.lib file.def
(或者,使用 LLVM 工具,使用 llvm-dlltool.exe。)
现在您的 DLL 有了一个导入库:对于 file.dll,您有一个 file.lib 导入库。