C++ linking boost library

C++ linking boost library

本文关键字:library boost linking C++      更新时间:2023-10-16
  1. 首先,我通过转到/usr/local/boost_1_49_0/并运行bootstrap.sh来构建需要构建的Boost库。一切顺利
  2. 步骤(1)在/usr/local/boost_1_49_0/stage/lib中创建所有.so.a文件
  3. 我针对一个库测试了链接,比如我的源代码中的lboost_regex#include <boost/regex>。这也很顺利
  4. 最后在asio上尝试了这个例子,我尝试了:

    g++ -I/usr/local/boost_1_49_0 MAIN.cpp -o MAIN -L/usr/local/boost_1_49_0/stage/lib -lboost_thread -lboost_system -lpthread
    

(4) 编译良好。但是当我用./MAIN运行程序时,我会得到以下错误:

./MAIN: error while loading shared libraries: libboost_system.so.1.49.0: cannot open shared object file: No such file or directory 

-L选项仅设置编译时库搜索路径;如果希望在运行时找到共享库,则必须在运行时知道其目录。

g++设置这一点的一种方法是通过编译器将-rpath传递给链接器;在你的情况下,你可以说-Wl,-rpath -Wl,/usr/local/boost_1_49_0/stage/lib。(这将目录嵌入到可执行文件中。)

另一种方法是将库安装在链接器默认搜索的位置(例如,/usr/local/lib可能是这样的位置,这取决于系统的配置方式)。

还有一种方法是设置环境变量,如LD_LIBRARY_PATH(Linux或Solaris)或DYLD_LIBRARY_PATH(Mac OS X),以告诉链接器在从设置变量的shell启动可执行文件时要搜索的位置。

您确定共享库位于加载程序可以找到它的位置吗?将它放在系统范围的目录中,或者与可执行文件放在同一目录中。

这里有一个链接,包含有关加载器的更多信息。