c++ - boost 编译问题

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

我在编译包含“boost/asio.hpp”的程序时遇到问题。
编译这个程序(取自boost站点):

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

并得到同样的错误。

我该如何解决这个问题?

最佳答案

您需要告诉链接器在哪里可以找到它需要的库。我更喜欢 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 稍后可以找到它。您可以在构建后运行 ldd example 来查看 ld 将加载什么内容。我敢打赌现在它说“未找到”,添加 RPATH 后它会找到该库。

另一个选择是在/etc/ld.so.conf 中将/usr/local/lib 设置为系统搜索路径,但这相当重量级。

关于c++ - boost 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744537/

相关文章:

boost - 如何为 Boost ASIO TCP 套接字设置 TCP_QUICKACK

PHP 脚本在通过命令行执行时不会工作,但在从浏览器执行时工作正常

c++ - 获取迭代器范围的每个第 n 个元素

c++ - 如何使用 Boost.serialize 序列化派生模板类?

glassfish-3 - Glassfish updatetool linux 64位问题

HBase Shell 挂起/卡住

c++ - 对类成员使用智能指针

c++ - 为什么带大括号的复制初始化会省略复制/移动构造?

c++ - 过载分辨率 : How is this not ambiguous?

c++ - 什么 OpenGL 状态需要在新的共享上下文中重置?