Обзор
nm анализирует таблицу символов в объектном файле и выводит имя, тип, адрес каждого символа и т. д. Это полезно для диагностики проблем компоновки, проверки содержимого библиотеки и анализа оптимизации кода.
Основные функции
- Вывод списка символов объектного файла
- Идентификация типов символов (функция, переменная, определен, не определен и т. д.)
- Предоставление информации об адресе и размере символа
- Поддержка декодирования имен C++
Основные опции
Команда nm предоставляет различные опции для фильтрации списка символов и управления форматом вывода.
Фильтрация символов
Формат вывода
Сгенерированная команда:
Комбинируйте команды.
Описание:
`nm` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры использования
Рассматриваются различные способы проверки информации о символах объектных файлов с помощью команды nm.
Просмотр списка символов по умолчанию
gcc -c main.c -o main.o
nm main.o
Выводит все символы скомпилированного исполняемого файла или объектного файла в формате по умолчанию.
Просмотр только неопределенных символов
nm -u main.o
Выводит только неопределенные символы, такие как внешние функции или переменные, которые не были связаны. Полезно для диагностики проблем компоновки.
Декодирование символов C++
g++ -c my_class.cpp -o my_class.o
nm -C my_class.o
Преобразует сложные имена символов C++ в удобочитаемый формат.
Вывод с размером символа
nm -S main.o
Выводит размер (в байтах), занимаемый каждым символом, вместе с его адресом.
Советы и примечания
Советы и примечания по эффективному использованию команды nm.
Символы типов символов
Символы, отображаемые рядом с каждым символом в выводе nm, указывают на тип символа. Заглавные буквы означают глобальные символы, строчные буквы - локальные символы.
- A: Абсолютный символ (Absolute)
- B/b: Секция неинициализированных данных (BSS)
- D/d: Секция инициализированных данных
- T/t: Текстовая (кодовая) секция
- U: Неопределенный символ (Undefined)
- W/w: Слабый символ (Weak)
Использование для отладки
nm очень полезен для диагностики ошибок компоновщика или проверки того, правильно ли включены определенные функции или переменные в библиотеку. В частности, опция -u помогает выявлять неопределенные ссылки и решать проблемы компоновки.