Подтвердить что ты не робот

Nm: "U" Символ undefined

Когда я nm на одной из моих libs:

nm libmylib.so

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

             U [email protected]@GLIBCXX_3.4

Я проверил man-страницу для nm и получил "U". Символ undefined. Что означает символ undefined?

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

4b9b3361

Ответ 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 в этом объекте. Некоторые символы оцениваются во время выполнения; это, вероятно, будет одним из них.