试图静态链接Boost

时间:2010-02-27 17:08:16

标签: linux boost linker static-linking

我在Linux,Eclipse CDT,g ++和Boost库中工作。有了使用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库?

3 个答案:

答案 0 :(得分:24)

对于pthread_mutex_init,您希望使用-pthread选项编译/链接:

g++ -static -pthread -o"MyProgram"  ./main.o   -lboost_thread

问题是像pthread_mutex_init这样的函数位于一个单独的库中。动态库可以包含它需要单独库的事实的元数据(因此libboost_thread.so包含它需要libpthread的事实)。

但静态库没有这些信息。因此,当您静态链接时,需要提供对任何必要库的引用。

至于使用-pthread而不是-lpthread,它稍微有点优选,因为它不仅链接了必要的库,还提供了应该使用的任何其他选项(例如-D_REENTRANT编译器)。

答案 1 :(得分:2)

尝试将-lpthread添加到您的调用中。

答案 2 :(得分:2)

在Linux上,动态库可能会自动依赖其他动态库,因此当您链接它时,您可以免费获得其他库。静态链接时,没有这样的系统,您必须手动指定其他库。