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