我在编译包含“boost / asio.hpp”的程序时遇到问题 编译此程序(取自升级网站):
example.cpp:
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " " );
}
带
c++ -I path/to/boost_1_55_0 example.cpp -o example
工作正常。 但是当该计划包括:
boost/asio.hpp
我正在尝试编译它:
g++ -I /usr/local/boost_1_55_0 example.cpp -o example -lboost_system -lboost_thread
生成了一个可执行文件,但是在尝试执行“example”时遇到了这个错误:
./example: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory
文件“libboost_system.so.1.55.0”位于“/ usr / local / lib”。 我还尝试用以下方法编译程序:
g++ -I /usr/local/boost_1_55_0 -L/usr/local/lib example.cpp -o example -lboost_system -lboost_thread
并得到了同样的错误。
我该如何解决这个问题?
答案 0 :(得分:2)
您需要告诉链接器在哪里找到它需要的库。我更喜欢RPATH:
g++ -I /usr/local/boost_1_55_0 -Wl,-rpath=/usr/local/lib example.cpp -o example -lboost_system -lboost_thread
将/usr/local/lib
加入可执行文件中,以便ld
可以在以后找到它。您可以在构建后运行ld
来查看ldd example
将加载的内容。我现在打赌它说“找不到”,并且在添加RPATH后它会找到该库。
另一个选择是将/ usr / local / lib设置为/etc/ld.so.conf中的系统搜索路径,但这个权重要高得多。
答案 1 :(得分:2)
将LD_LIBRARY_PATH设置为export LD_LIBRARY_PATH = boost的路径