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