试图静态链接提升

我正在使用Boost库在Linux,Eclipse CDT,g ++中工作。 现有的使用Boost线程的程序,我尝试静态而不是dynamic地链接它。 / usr / local / lib目录包含以下文件:

libbost_thread.a libbost_thread.so libbost_thread.1.41.0 

dynamic链接工作:

 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器的-D_REENTRANT )。

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

在Linux上,一个动态库可能会自动依赖其他动态库,所以当你连接它时,你可以免费获得其他库。 静态链接时,不存在这样的系统,您必须手动指定其他库。