1

g++ 3.3.4 で共有ライブラリを構築しています。取得しているため、ライブラリにリンクできません

./BcdFile.RHEL70.so: undefined symbol: _ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE13insert_uniqueERKj

どの c++fil が次のように説明するか

std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::insert_unique(unsigned int const&)

これは hash_map を使用したことが原因かもしれないと思っていましたが、それをすべて取り除き、通常の std::map に切り替えました。を含むリンクを行うためにg ++を使用しています-lstdc++

このテンプレートをインスタンス化するクラスを知っている人はいますか? またはさらに良いことに、どのライブラリにリンクする必要がありますか?

EDIT:さらに見直したところ、コンパイル時に -frepo フラグを追加したことが原因であることが判明しましたが、残念ながらそのフラグは gcc3.3 バグを回避しています。

4

3 に答える 3

1

std::_Rb_Treeを使用したことによる可能性が最も高い、赤黒木である可能性がありますmap。ライブラリがアプリケーションとlibstdc++は異なるバージョンの に対してリンクしていない限り、これは の一部である必要があります。libstdc++

編集: 明確にするために、赤黒ツリーは の基礎となるデータ構造ですmap。生の値を使用するのでhash_mapはなく、使用する前にキーをハッシュするだけです。

于 2008-09-26T21:01:54.657 に答える
0

gcc の異なるバージョンから libstdc++.so の 2 つの異なる互換性のないバージョンがあるようです。パスを確認してください。

于 2008-09-27T02:14:15.233 に答える
0

試す

#include < map > 
マップを使用しているソース ファイル内。

于 2008-09-26T21:06:42.073 に答える