我在 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
产生大量消息,例如:
undefined reference to `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
给编译器)。
关于linux - 尝试静态链接 Boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348200/