linux - 尝试静态链接 Boost

标签 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

产生大量消息,例如:

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/

相关文章:

linux - 如何将一个文件中的行替换到另一个文件中

linux - 何时不将 -r 与 cp 一起使用?

c++ - boost scoped_lock 与普通锁定/解锁

c++ - 带有 const 指针的 boost::dynamic_pointer_cast 不起作用?

c++ - 带有 boost ublas 的常数矩阵

c++ - XCode 4.2 静态库链接问题

c - 如何从内核模块引用非导出的 Linux 内核函数?

linux - 在linux脚本中更改用户

c - gcc -c 失败,尽管它已链接到所需的库

c++ - 使用 Visual Studio 2005(VC8) 时出现链接错误