Как просмотреть символы в объектных файлах?


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

5 55

5 ответов:

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

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

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

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

nm

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

можно использовать 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);
}