linux下Boost序列化问题解决
由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下。
#include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/array.hpp> #include <iostream> #include <sstream> std::stringstream ss; void save() { boost::archive::text_oarchive oa(ss); boost::array<int, 3> a = { 0, 1, 2 }; oa << a; } void load() { boost::archive::text_iarchive ia(ss); boost::array<int, 3> a; ia >> a; std::cout << a[0] << ", " << a[1] << ", " << a[2] << std::endl; } int main() { save(); load(); }
源码来自:http://zh.highscore.de/cpp/boost/serialization.html
上述代码命名为test.cpp,使用如下命令编译:
g++ -o main test.cpp
报错主要是undefined reference to boost::archive::archive_exception::archive_exceptiono();
网上说需要在编译的时候指定要使用的动态链接库,于是修改编译命令:
g++ -o main test.cpp -lboost_serialization
报错主要是undefined reference to boost::archive::text_iarchive_impl<boost::archive::text_iarchive>
undefined reference to boost::archive::archive_exception::~archive_exception()等
继续搜索,修改编译命令如下:
g++ -o main test.cpp -lboost_serialization -L /usr/boost_1_60_0/stage/lib
终于不报错了,但是执行./main的时候再次遇到错误: error while loading shared libraries: libboost_serialization.so.1.60.0: cannot open shared object file: No such file or directory .
解决:
1. 首先 find / -name libboost_serialization.so.1.60.0找到缺少的链接文件到底在那儿。
2. 使用LD_DEBUG=libs /usr/Coding/bin/main -v找到程序要去哪里找链接库。
3. 假设 trying file=/usr/lib/libboost_serialization.so.1.60.0 而链接库的实际存储位置是 /usr/local/lib/libboost_serialization.so.1.60.0,做一个软连接 ln -s /usr/local/lib/libboost_serialization.so.1.60.0 /usr/lib/libboost_serialization.so.1.60.0