试图静态链接Boost
·
问题:试图静态链接Boost
我正在使用 Boost 库在 Linux、Eclipse CDT、g++ 中工作。拥有使用 Boost 线程的现有程序,我尝试静态链接它而不是动态链接。 /usr/local/lib 目录包含以下文件:
libbost_thread.a
libbost_thread.so
libbost_thread.1.41.0
动态链接工作:
g++ -o"MyProgram" ./main.o -lboost_thread
静态链接:
g++ -static -o"MyProgram" ./main.o -lboost_thread
产生大量消息,例如:
未定义对 `pthread_mutex_init' 的引用
如何静态链接到 Boost 库?
解答
对于 pthread_mutex_init,您希望使用 -pthread 选项进行编译/链接:
g++ -static -pthread -o"MyProgram" ./main.o -lboost_thread
问题是像 pthread_mutex_init 这样的函数在一个单独的库中。动态库可以包含元数据,因为它需要单独的库(因此 libboost_thread.so 包含它需要 libpthread 的事实)。
但是静态库没有这些信息。因此,当您静态链接时,您需要提供对任何必要库的引用。
至于使用-pthread而不是-lpthread,它稍微好一点,因为它不仅链接了必要的库,而且还提供了应该使用的任何其他选项(例如编译器的-D_REENTRANT)。
更多推荐

所有评论(0)