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