【问题标题】:Trouble using boost, cannot open shared object file使用 boost 时遇到问题,无法打开共享对象文件
【发布时间】:2016-07-05 14:06:50
【问题描述】:

所以我正在尝试编译并运行一个简单的升压计时器程序

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>


int main() {
    using namespace boost::asio;
    io_service io;
    deadline_timer t(io, boost::posix_time::seconds(5));
    t.wait();
    std::cout << "Hello World!" << std::endl;

    return 0;
}

我在编译这个程序时尝试的第一件事就是做

g++ -I /home/vagrant/boost_1_60_0 main.cpp

这给了我一个错误

/tmp/cc8Ytqko.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0xfc): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x108): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x114): undefined reference to `boost::system::system_category()'
/tmp/cc8Ytqko.o: In function `boost::system::error_code::error_code()':
main.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
/tmp/cc8Ytqko.o: In function `boost::asio::error::get_system_category()':
main.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

然后我做了一些研究,似乎我需要构建 boost_system 二进制文件,所以我去了 boost 所在的目录并运行

./bootstrap.sh
./b2 --with-system

然后我又编译了

g++ -I /home/vagrant/boost_1_60_0 main.cpp -L/home/vagrant/boost_1_60_0/stage/lib/ -lboost_system

这并没有给我任何错误,但是当我运行可执行文件时

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ ./a.out
./a.out: error while loading shared libraries: libboost_system.so.1.60.0: cannot open shared object file: No such file or directory

真的不知道我需要在这里做什么

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    在动态链接器搜索的目录列表中找不到liibboost_system.so.1.60.0。默认情况下,非默认共享对象位置不存储在二进制文件中。环境变量LD_LIBRARY_PATH 可用于在标准位置之前添加将要搜索的目录:

    LD_LIBRARY_PATH=/home/vagrant/boost_1_60_0/stage/lib/ ./a.out
    

    这仅适用于current bash environment,还有store the path in the executable的方法,这样就不需要环境变量了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2013-04-21
    • 2013-05-05
    • 2017-05-21
    • 2012-05-24
    • 2014-02-10
    • 2021-01-06
    相关资源
    最近更新 更多