问题:试图静态链接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)。

Logo

更多推荐