gpt4 book ai didi

c++ - boost 的编译问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:28 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com