2008-09-26 126 views
1

我正在用g ++ 3.3.4構建一個共享庫。因爲我越來越無法鏈接到共享庫

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

其中C++ filt的描述爲

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++

有誰知道什麼類會實例化這個模板?或者甚至更好,我需要鏈接到哪個庫?

編輯:經過進一步審查,它似乎添加-frepo標誌編譯時造成這一點,不幸的是,標誌正在解決gcc3.3錯誤。

+0

那麼,你有沒有想過它? – Dima 2008-10-01 19:03:41

回答

1

std::_Rb_Tree可能是一棵紅黑樹,很可能來自使用map。它應該是libstdc++的一部分,除非你的庫鏈接到的應用程序的版本不同於libstdc++,從目前爲止你所說的看起來似乎不大可能。

編輯:只是爲了澄清,紅黑樹是map中的基礎數據結構。 hash_map所做的就是在使用它之前對密鑰進行散列,而不是使用原始值。

0

嘗試使用地圖的源文件中的

#include < map >

+0

缺少#include會導致編譯時錯誤,而不是鏈接時間錯誤。 – KeithB 2008-09-30 13:22:50

0

您似乎有兩個不同版本的libstdC++。因此來自不同版本的gcc。檢查你的路徑。