【发布时间】:2011-04-01 03:10:19
【问题描述】:
我在将静态库 stxxl 链接到共享库时遇到了一些问题,如我的问题 Linking a static library into Boost Python (shared library) - Import Error 中所述
我使用的命令是
g++ -Wall -pthread -march=i686 -I/home/zenna/Downloads/stxxl-1.3.0/include -include stxxl/bits/defines.h -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I /home/zenna/local/include/ -I /usr/include/python2.6/ -fPIC -c partition.cpp -o obj/Partition_wrap.o
并链接:
g++ -shared -lboost_python -L/home/zenna/local/lib/ -L/home/zenna/Downloads/stxxl-1.3.0/lib/bk/ -Wall -pthread -L/home/zenna/Downloads/stxxl-1.3.0/lib -lstxxl -o lib/fast_parts.so obj/Partition_wrap.o
使用 nm 我发现丢失的符号在最终输出的共享对象库中,但类型为“U”表示未定义。
然后我将链接命令更改为不仅使用 -lstxxl,而且还将整个存档文件作为另一个输入添加到链接器
使得新命令是(末尾不同)
++ -shared -lboost_python -L/home/zenna/local/lib/ -L/home/zenna/Downloads/stxxl-1.3.0/lib/bk/ -Wall -pthread -L/home/zenna/下载/stxxl-1.3.0/lib -lstxxl -o lib/fast_parts.so obj/Partition_wrap.o obj/libstxxl.a
据我所知,这解决了问题。
然后我的问题是使用 -l 标志和添加存档作为输入有什么区别?为什么以前的方法会导致未定义的符号?
【问题讨论】:
标签: linker compilation shared-libraries