Как найти тип библиотеки (.so или .a) в C ++ / UNIX - PullRequest
2 голосов
/ 12 октября 2009

Учитывая файл библиотеки C ++ / UNIX (без расширения), мне нужно определить тип библиотеки, будь то динамическая библиотека (файл .so) или статическая библиотека (файл .a), основываясь на ее содержимом (скажем, grepping). содержание против ключевого слова)

Как мне это сделать в командной строке UNIX?

Ответы [ 2 ]

5 голосов
/ 12 октября 2009

Попробуйте file <library name>. Он должен отображать shared или dynamically linked среди своих выходных данных, если файл является динамически загружаемым модулем.

1 голос
/ 12 октября 2009

Попробуйте file -L <library name> | grep shared, если это дает какой-либо вывод, файл динамически связан. В качестве альтернативы вы можете сделать ldd <library name> | grep 'not a dynamic executable', который выдает результат, если он статический. Надеюсь, что это отвечает на ваш вопрос, я бы добавил комментарий к ответу Авиатора, но не могу комментировать (пока).

Опция -L для файла заставляет файлы разыменовывать символические ссылки, что не является поведением по умолчанию, если POSIXLY_CORRECT не определено (как это имеет место в моей системе).

Пример сценария:

if [ -z "$(file -L  | grep shared)" ]; then
    echo "not a dynamic lib";
else
    echo "dynamic lib";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...