Как просмотреть символы в объектных файлах? - PullRequest
67 голосов
/ 07 октября 2010

Как я могу просмотреть символы в .o файле? НМ не работает для меня. Я использую g ++ / linux.

Ответы [ 5 ]

78 голосов
/ 07 октября 2010

Вместо nm вы можете использовать мощный objdump. Смотрите man-страницу для деталей. Попробуйте objdump -t myfile или objdump -T myfile. С флагом -C вы также можете разбирать имена C ++, как nm делает.

12 голосов
/ 07 октября 2010

Вы использовали кросс-компилятор для другой платформы?Если это так, вам нужно использовать соответствующую команду nm или objdump.

Например, если вы использовали XXX-YYY-gcc для компиляции файла .o, вам нужно использовать XXX-YYY-nm или XXX-YYY-objdump для обработки файлов.

5 голосов
/ 30 декабря 2016

Просто запустить: nm you_obj_file.o | c++filt

5 голосов
/ 07 октября 2010

Существует команда для просмотра того, какие функции включены в объектный файл, библиотеку или исполняемый файл:

nm
1 голос
/ 29 сентября 2018

Вы можете использовать nm -C .o/lib/exe, например:

xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a 

file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)

, используя nm -C, это будет более читабельным , если вы просто используете nm:

xiongyu@ubuntu:~/tmp/build$ nm libfile1.a 

file1.cpp.o:
0000000000000000 T _Z1fv
0000000000000000 W _Z3funIiET_S0_

как мы видим, он не так удобен для чтения.

Ниже приведено то, на что похожа моя file1.cpp:

xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}
...