使用boost时遇到麻烦,无法打开共享对象文件

时间:2016-03-18 17:35:03

标签: c++ boost

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

#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

我真的不知道自己需要做什么

1 个答案:

答案 0 :(得分:4)

在动态链接器搜索的目录列表中找不到

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的方式,因此不需要环境变量。