Невозможно связаться с общей библиотекой - PullRequest
1 голос
/ 27 сентября 2008

Я создаю разделяемую библиотеку с g ++ 3.3.4. Я не могу связаться с библиотекой, потому что я получаю

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

Какой с ++ фильтр описывает как

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.

Ответы [ 3 ]

1 голос
/ 27 сентября 2008

std::_Rb_Tree может быть красно-черным деревом, которое, скорее всего, будет от использования map. Он должен быть частью libstdc++, если ваша библиотека не ссылается на версию libstdc++, отличную от приложения, что из того, что вы сказали до сих пор, маловероятно.

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, красно-черное дерево является базовой структурой данных в map. Все, что делает hash_map, это хеширует ключ перед его использованием, а не использует необработанное значение.

0 голосов
/ 27 сентября 2008

Похоже, у вас есть две разные несовместимые версии libstdc ++. Так из разных версий gcc. Проверьте свои пути.

0 голосов
/ 27 сентября 2008

Попробуйте

#include < map > 
в исходном файле, где вы используете карту.
...