使用boost编译问题

时间:2013-12-23 13:25:55

标签: c++ boost ubuntu-12.04 boost-asio

我在编译包含“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

并得到了同样的错误。

我该如何解决这个问题?

2 个答案:

答案 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的路径

相关问题