我正在使用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上,一个动态库可能会自动依赖其他动态库,所以当你连接它时,你可以免费获得其他库。 静态链接时,不存在这样的系统,您必须手动指定其他库。