MinGW ld将DLL制作成一个非常短的文件

时间:2015-06-24 13:11:16

标签: windows dll mingw .a

我想将一些.a文件链接到带有MinGW Site Latitude Longitude Windows.SEP.11 Mac.SEP.11 Windows.SEP.12 Mac.SEP.12 newCol 1 31R001 33.80887 -117.8440 63 0 124 0 33.68984 2 31R002 33.87726 -117.7001 174 1 185 1 48.47645 3 31R003 33.82082 -117.8118 11 4 9 32 26.78571 4 31R004 33.85237 -117.7955 85 0 75 1 52.79503 5 31R005 33.82970 -117.7875 163 0 23 0 87.63441 6 31R006 33.81027 -117.8304 71 50 5 50 68.75000 的.dll文件中,但它运行不好: .a文件很大,比如0.98 MB,但当我这样做时:

  

ld liba.a libb.a libc.a -shared -o final.dll

但效果不好!我得到了一个只有5 kb的文件ld。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

无法链接这样的库: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命令,由于未解决的引用,链接肯定会失败)。另请注意,我假设您的gccar是MinGW工具,并且您有一个unixy rm,(例如MSYS提供);如果您的工具不是这些工具,那么您可能需要mingw32-gccmingw32-ar,(或其他任何适合您的工具),以及一些替代命令来清除临时目录。