2013-08-21 3 views
1

Я в настоящее время застрял с некоторым кодом, который я успешно скомпилировал в .so-файл. Когда я пытаюсь связать свою библиотеку в какой-то код, если не удается со следующим утверждением:Как отследить неопределенный символ

неопределенный символ: _ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE

только полезная информация, которую я могу получить то, что есть что-то с объектом или которая использует следующие типы: «CORBA :: Any» (обычный тип corba) и «RTT :: corba :: Math :: Matrixd» (тип, который определяется с использованием одного файла hh и двух файлов cc).

Мне было бы интересно узнать, где именно в моем коде генерируется этот символ, и почему его не найти. Я подозревал, что она представляет собой функцию, определенную в одном из моих куб.см файлов, так вот как я собирал всю вещь:

г ++ -I {} CORBA включает main.cpp one.cc two.cc -L { Библиотеки CORBA}

Какой процесс отладки следует выполнять?

ответ

6

В среде Unix c++filt будет доступна на вашей системе, это то, как вы будете использовать его demangle имя функции:

c++filt _ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE 

Я просто использовал c++filtjs, поскольку он поддерживает как g++ и msvc++, он пришел назад с этим:

operator>>=(CORBA::Any const&, RTT::corba::Math::Matrixd*&) 
+0

прототип моей функции "оператор >> = (CORBA :: Any, сопзЬ & RTT :: CORBA :: Math :: Matrixd * &)". Нормально ли, что запятая инвертирована? Считаете ли вы, что это может быть связано с проблемой? –

+0

На самом деле у меня есть две аналогичные функции. Первый - «operator >> = (const CORBA :: Any &, RTT :: corba :: Math :: Matrixd * &)», а второй - «operator >> = (const CORBA :: Any &, const RTT: : CORBA :: Math :: Matrixd * &)». Я бы сказал, что он соответствует первому. –

+0

@Flav Я не понимаю вопрос с перевернутой запятой, и он соответствует первому раз, так как совпадают квалификаторы 'const'. –

Смежные вопросы