使用提升时出现问题,无法打开共享对象文件

Trouble using boost, cannot open shared object file

本文关键字:共享 文件 对象 问题      更新时间:2023-10-16

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

#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

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

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

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

这仅适用于当前的 bash 环境,并且还有一些方法可以将路径存储在可执行文件中,以便不需要环境变量。