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;
}
ありがとうSean。私はあなたが示唆したことをしたが、そのエラーは消えてしまうが、未定義のシンボルの表面は違う。 boost :: archive :: detail :: basic_oserializerのシンボルは未定義です。このリンクプロセスがどのように機能するか教えてください。私は本当にあなたの助けに感謝します。私はこれを3日間過ごしました。本当にイライラしています。 –
@ビン:それは大きな仕事です。ウィキペディアでリンカ、ダイナミックリンカ、ライブラリ(コンピューティング)を調べることから始めます。これは、リンカーが何をしているのか、そしてなぜブースト逐次化ライブラリにリンクする必要があるのかをよく理解しているはずです。定義されていないシンボルエラーは、リンカーが、オブジェクトファイルまたはインクルードするように言われたライブラリのいずれかでそのシンボルを見つけることができないことを示します。これは、複数のバージョンのライブラリがインストールされている場合、リンカが間違ったライブラリにリンクしている可能性があります。 – Sean
ありがとうショーン、本当に感謝しています。私はあなたが提案したことをします。 –