C++ 使用boost序列化时出现的问题

C++ 使用boost序列化时出现的问题,c++,boost,boost-serialization,boost-unordered,C++,Boost,Boost Serialization,Boost Unordered,你能帮我解决下面的问题吗?我试了三天都没有成功 问题在于我的序列化代码。每当我尝试实例化序列化时,都会遇到此错误 Can't load '/home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so' for module nDB: /home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so: undefi

你能帮我解决下面的问题吗?我试了三天都没有成功

问题在于我的序列化代码。每当我尝试实例化序列化时,都会遇到此错误

   Can't load '/home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so' for module nDB: /home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so: undefined symbol: _ZTIN5boost7archive17archive_exceptionE at ...
下面是我写的代码

    //   nDB CONSTRUCTOR
    //**********************
    nDB::nDB() {
       //_LAYERS = new boost::unordered_map<string,layer,myhash,cmp_str>;
    }

    //   nDB DESTRUCTOR
    //**********************
    nDB::~nDB() {}

    //   nDB METHODS
    //**********************

    //===============================================================
    //  SERIALIZATION DEFINITION AND INITIALIZATION

    template<class Archive>
    void nDB::serialize(Archive &ar, const unsigned int version) {
       boost::unordered_map<string,macro*,myhash,cmp_str>::const_iterator _ITER;
       for (_ITER = _MACROS.begin();_ITER != _MACROS.end();_ITER++) {
          ar & _ITER->first;
          ar & *(_ITER->second);
       }
    }
    //template void nDB::serialize<boost::archive::binary_oarchive>(
    // boost::archive::binary_oarchive & ar,
    // const unsigned int version
    //);
    //template void nDB::serialize<boost::archive::binary_iarchive>(
    // boost::archive::binary_iarchive & ar,
    // const unsigned int version
    //);
    //================================================================

    void nDB::save_macros(string filename) {
       std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
       boost::archive::binary_oarchive oa(ofs);
       oa << *this;
    }
//nDB构造函数
//**********************
nDB::nDB(){
//_层=新的boost::无序的_图;
}
//nDB析构函数
//**********************
nDB::~nDB(){}
//nDB方法
//**********************
//===============================================================
//序列化定义和初始化
样板
void nDB::serialize(存档&ar,常量unsigned int版本){
boost::无序映射::常量迭代器;
对于(_ITER=_MACROS.begin();_ITER!=_MACROS.end();_ITER++){
ar&U ITER->first;
ar&*(_ITER->秒);
}
}
//模板无效nDB::序列化(
//boost::archive::binary_oarchive&ar,
//常量无符号整数版本
//);
//模板无效nDB::序列化(
//boost::archive::二进制文件,
//常量无符号整数版本
//);
//================================================================
void nDB::save_宏(字符串文件名){
ofs流的std::of(filename.c_str(),std::ios::out | std::ios::binary);
boost::archive::二进制文件oa(ofs);

oa您需要针对boost序列化库进行链接。尝试将
-lboost\u serialization
添加到您的链接器标志。

谢谢Sean。我按照您的建议做了,错误消失了,但出现了另一个未定义的符号表面。它现在是未定义的boost::archive::detail::basic\u oserizer的符号。请进行教学告诉我这个链接过程是如何工作的?我真的很感谢你的帮助。我花了3天的时间在这方面,这真的很令人沮丧。@Binh:这是一项艰巨的任务。我将从查找链接器、动态链接器和库(计算)开始在Wikipedia上。这应该可以让您很好地了解链接器的功能以及为什么需要链接到boost序列化库。您的未定义符号错误表明链接器在任何对象文件或它被告知要包含的任何库中都找不到该符号。如果您有安装了多个版本的库,链接器可能链接到了错误的版本。谢谢Sean,我非常感谢。我会按照你的建议执行。嗨Sean,我可以问另一个问题吗?此消息的意思是什么“-lboost\u序列化:链接器输入文件未使用,因为链接未完成”感谢您的帮助Hi Binh,如果我不得不猜测您将该选项添加到了编译器标志,而不是链接器标志。编译和链接是单独的步骤(尽管它们可以组合)。您可能需要阅读编译器手册。