C ++链接boost库

时间:2012-07-07 04:51:18

标签: c++ boost linker

  1. 首先,我通过转到/usr/local/boost_1_49_0/并运行bootstrap.sh来构建需要构建的Boost库。这很好。
  2. 步骤(1)在.so
  3. 中创建了所有.a/usr/local/boost_1_49_0/stage/lib个文件
  4. 我测试了链接库,在我的源代码中说lboost_regex#include <boost/regex>。这也没关系。
  5. 最后在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
    
  6. (4)编译好了。但是当我用./MAIN运行程序时,我收到以下错误:

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

2 个答案:

答案 0 :(得分:3)

-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启动可执行文件时搜索的位置变量已设置。

答案 1 :(得分:1)

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

Here's a link with more information about the loader.