- 首先,我通过转至
/usr/local/boost_1_49_0/
构建了需要构建的 Boost 库并运行bootstrap.sh
.一切顺利。 - 第 (1) 步创建了所有
.so
和.a
/usr/local/boost_1_49_0/stage/lib
中的文件 - 我测试了与库的链接,比如
lboost_regex
和#include <boost/regex>
在我的源代码中。这也顺利。 最后在 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 启动可执行文件。
关于C++ 链接 boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372340/