我正在 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 库?
对于 pthread_mutex_init,您需要使用 -pthread 选项进行编译/链接:
g++ -static -pthread -o"MyProgram" ./main.o -lboost_thread
问题是像 pthread_mutex_init 这样的函数位于单独的库中。动态库可以包含它需要单独库的元数据(因此 libboost_thread.so 包含它需要 libpthread 的事实)。
但静态库没有这些信息。因此,当您静态链接时,您需要提供对任何必要库的引用。
至于使用-pthread
代替-lpthread
,它稍微更可取,因为它不仅链接必要的库,而且提供应该使用的任何其他选项(例如-D_REENTRANT
给编译器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)