Nm: "U" Символ undefined
Когда я nm на одной из моих libs:
nm libmylib.so
Я получаю такую строку
U [email protected]@GLIBCXX_3.4
Я проверил man-страницу для nm и получил "U". Символ undefined. Что означает символ undefined?
Если это действительно undefined, то почему nm сообщает об этом вообще?
Ответы
Ответ 1
Символ undefined - это символ, который использует библиотека, но не определен ни в одном из объектных файлов, которые входили в создание библиотеки.
Обычно символ определен в другой библиотеке, которая также должна быть связана с вашим приложением. В качестве альтернативы символ undefined, потому что вы забыли создать код, который определяет символ, или вы забыли включить объектный файл с этим символом в свою библиотеку.
В вашем случае это выглядит как символ из вашей библиотеки реализации C, поэтому вы ожидаете, что это будет undefined в вашей собственной библиотеке. Он будет определен в вашем libc.so везде, где это возможно, возможно/usr/lib.
Ответ 2
Это означает, что библиотека ссылается на этот символ (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage
в этом случае?), но не определяет его; какая-то часть программы, с которой вы связываете ее, или какая-то другая библиотека должна это сделать. Если вы решили определить его в своей библиотеке, это означает, что вы не связали объектный файл с этим определением символа с остальной частью библиотечного кода.
Ответ 3
Расшифровка этого может быть выполнена следующим образом:
U [email protected]@GLIBCXX_3.4
Средства:
U->>> in your library its undefined
что такое undefined?
_ZNSs4_Rep20_S_empty_rep_storageE
Где это может найти?
GLIBCXX_3.4
Ответ 4
Я думаю, что это означает именно то: undefined в этом объекте. Некоторые символы оцениваются во время выполнения; это, вероятно, будет одним из них.