2010-02-24 6 views
37

Когда я нм на один из моих LIBS:нм: «U» символ не определен

нм libmylib.so

Я получаю строку этой

   U [email protected]@GLIBCXX_3.4 

Я проверил человека страница для nm и я получил «U». Символ не определен. Что означает неопределенный символ?

Если это действительно не определено, то почему nm сообщает об этом вообще?

+7

как в сторону, нм --demangle очень полезно для C++ это делает символы более дружественным –

ответ

33

Неопределенный символ - это символ, который библиотека использует, но не определена ни в одном из объектных файлов, которые входили в создание библиотеки.

Обычно символ определен в другой библиотеке, которая также должна быть связана с вашим приложением. В качестве альтернативы символ не определен, потому что вы забыли создать код, который определяет символ, или вы забыли включить объектный файл с этим символом в свою библиотеку.

В вашем случае это похоже на символ из библиотеки C вашей реализации, поэтому вы ожидаете, что это будет неопределено в вашей собственной библиотеке. Он будет определен в вашем libc.so везде, где это возможно, возможно/usr/lib.

+0

выглядит как символ из libstdC++, на самом деле, но да, можно было бы ожидать, что должны быть предоставлены для вас. – ephemient

+0

@ephemient: Woops, я пропустил XX в конце :) Спасибо. – Troubadour

0

Это означает, что библиотека ссылается на этот символ (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage в данном случае?), Но это не определяет его; какая-то часть программы, с которой вы связываете ее, или какая-то другая библиотека должна это сделать. Если вы решили определить его в своей библиотеке, это означает, что вы не связали объектный файл с определением этого символа с остальной частью библиотечного кода.

-1

Я думаю, что это означает именно то, что: undefined в этом объекте. Некоторые символы оцениваются во время выполнения; это, вероятно, будет одним из них.

0

расшифровке это можно сделать так:

  U [email protected]@GLIBCXX_3.4 

Средства:

U->>> in your library its undefined 

, что не определено?

 _ZNSs4_Rep20_S_empty_rep_storageE 

Где это возможно?

 GLIBCXX_3.4