【发布时间】:2015-06-24 13:11:16
【问题描述】:
我想用 MinGW ld 将一些 .a 文件链接到 .dll 文件中,但效果不好:
.a 文件很大,比如 0.98 MB,但是当我这样做时:
ld liba.a libb.a libc.a -shared -o final.dll
但是效果不好!我得到了一个只有 5 kb 的文件 final.dll。
我该怎么办?
【问题讨论】:
我想用 MinGW ld 将一些 .a 文件链接到 .dll 文件中,但效果不好:
.a 文件很大,比如 0.98 MB,但是当我这样做时:
ld liba.a libb.a libc.a -shared -o final.dll
但是效果不好!我得到了一个只有 5 kb 的文件 final.dll。
我该怎么办?
【问题讨论】:
你不能像这样链接库:ld liba.a libb.a libc.a -shared -o final.dll; ld 永远不会从其中任何一个中选择任何对象模块,因为它永远不会有任何未解决的引用要满足。为了实现您的目标,可能的解决方法是:
mkdir dlltmp
cd dlltmp
ar x ../liba.a
ar x ../libb.a
ar x ../libc.a
gcc -shared -o ../final.dll *.o
并且,事后清理:
cd ..
rm -rf dlltmp
请注意这里使用gcc 而不是ld;直接调用ld 几乎总是一个坏 的想法,(如果你将它用作ld -o ../final.dll *.o,而不是我在这里显示的gcc 命令,你的链接肯定会失败,因为未解决的参考)。另请注意,我假设您的 gcc 和 ar 是 MinGW 工具,并且您有一个 unixy rm,(例如 MSYS 提供的);如果您的工具不是这些,那么您可能需要mingw32-gcc、mingw32-ar(或其他适合您的工具)以及一些替代命令来删除临时目录。
【讨论】: