Вопрос или проблема
Я пытаюсь найти символ в библиотеке.
$ nm /usr/local/ssl/macosx-x64/lib/libcrypto.a | grep rc4_md5_enc
предупреждение: nm: нет списка имен
предупреждение: nm: нет списка имен
предупреждение: nm: нет списка имен
...
Страница man для GNU nm не обсуждает это состояние или вывод.
Что означает предупреждение: nm: нет списка имен
?
Согласно странице руководства для nm
, “список имен” означает “таблица символов”. Если вы выполняете эту команду в Linux, а файл (как предполагает его путь) предназначен для OSX, то формат двоичного файла, вероятно, несовместим. Например, если вы используете
file /usr/local/ssl/macosx-x64/lib/libcrypto.a
он может сообщить вам, что это “актуальный архив”. Но другие инструменты могут не справляться с файлами из другой системы.
Ответ или решение
Сообщение "warning: nm: no name list" возникает при использовании утилиты nm
в контексте работы с объектными файлами или библиотеками, когда утилита не может извлечь таблицу символов из указанного бинарного файла. В вашем случае вы пытаетесь выполнить команду nm
на библиотеке libcrypto.a
, которая, вероятно, была собрана для macOS, в то время как вы, возможно, работаете в среде Linux.
Пояснение проблемы
-
Что такое
nm
?
Утилитаnm
в системе Unix используется для вывода таблицы символов из объектных файлов, статических библиотек (например,.a
файлы) и исполняемых файлов. Таблица символов содержит информацию о функциях и переменных, которые присутствуют в файле, и используется для диагностики и отладки. -
Что означает "no name list"?
Сообщение "no name list" указывает, чтоnm
не смог найти символы (или таблицу символов) в указанном файле. Это может произойти по нескольким причинам:- Файл не содержит необходимых символов.
- Указанный файл является бинарным файлом для несовместимой архитектуры (в вашем случае вы можете иметь дело с macOS-форматом, а не Linux).
- Файл был собран с определенными опциями компиляции, которые исключают создание таблицы символов (например, использование флага
-s
).
-
Как проверить формат файла?
Для диагностики состояния файла, пожалуйста, используйте командуfile
, как вы уже упомянули:file /usr/local/ssl/macosx-x64/lib/libcrypto.a
Эта команда предоставит информацию о формате файла. Если файл определен как "current archive", существует высокая вероятность несовместимости.
-
Разрешение проблемы
- Проверьте, правильно ли вы используете библиотеку. Убедитесь, что она предназначена для использования в вашей системе. Если вы работаете на Linux, рекомендуется использовать версию библиотеки, собранную специально для Linux.
- Если вам требуется работа с macOS-библиотекой, вам может понадобиться использовать виртуальную машину или контейнер с установленной macOS, или же использовать инструменты кросс-компиляции.
- Рассмотрите возможность использования других инструментов или методов для работы со сторонними библиотеками, если цель состоит в том, чтобы получить доступ к символам.
Заключение
Сообщение "warning: nm: no name list" служит индикатором разного рода проблем с совместимостью или отсутствием информации о символах в целевом файле. Для успешного решения этой проблемы следует убедиться в правильности выбранной библиотеки и её формате. Если у вас есть дополнительные вопросы или необходима помощь с другим инструментом, не стесняйтесь обращаться!