0
  1. 首先,我通过转到/usr/local/boost_1_49_0/并运行bootstrap.sh. 这一切顺利。
  2. 步骤(1)创建了所有的.so.a文件/usr/local/boost_1_49_0/stage/lib
  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 
4

2 回答 2

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 启动可执行文件时在哪里搜索。

于 2012-07-07T04:59:42.697 回答
1

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

这是一个链接,其中包含有关加载程序的更多信息。

于 2012-07-07T04:59:07.550 回答