0
请问下面的问题,请帮助我吗?我已经尝试了3天没有成功。使用升压序列化问题
问题在于我的序列化代码。每当我尝试实例化序列化时,都会遇到此错误。
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;
}
谢谢肖恩。我做了你的建议,错误消失,但一个不同的未定义的符号表面。它现在是未定义的boost :: archive :: detail :: basic_oserializer的符号。你能告诉我这个链接过程是如何工作的吗?我非常感谢你的帮助。我已经花了3天的时间,这是非常令人沮丧的。 – 2012-03-30 04:21:01
@Binh:这是一个很大的任务。我将首先在Wikipedia上查找链接器,动态链接器和库(计算)。这应该能够让您很好地了解链接器的功能以及为什么需要链接到boost序列化库。您的未定义符号错误表示链接程序无法在任何对象文件或其中包含的任何库中找到该符号。造成这种情况的一个可能原因可能是,如果您安装了多个版本的库,链接器可能会链接到错误的链接器。 – Sean 2012-03-30 04:34:42
谢谢肖恩,我真的很感激。我会做你的建议。 – 2012-03-30 04:38:32