如何为 Embarcadero 的 RAD Studio 12.1 64 位现代 (clang 15) C++ 编译器导入/生成导入库?

问题描述 投票:0回答:1

对于 C++ Builder 的旧版

bcc64
64 位编译器,
mkexp.exe
可用于导入库。要么我没有正确使用它,要么
mkexp.exe
输出文件与新的 Win64x (
bcc64x
)(现代 - clang 15)编译器不兼容。

新编译器如何从

.lib
生成
.dll

我尝试了

mkexp.exe
(适用于旧的64位编译器的方式)。 Embarcadero wiki 没有提及任何有关为新目标生成
.lib
文件的内容。或者,如果它在任何地方都有记录,我找不到它。

c++ c++builder rad-studio c++builder-12-athens
1个回答
0
投票

最近的 Embarcadero 博客文章对此进行了解决:

如何使用 12.1 中新的 Clang 工具链实现常见任务

创建 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 导入库。

© www.soinside.com 2019 - 2024. All rights reserved.