2016-11-24 3 views
3

Для статической библиотеки (.a-файл), как отобразить зависимости этого модуля на уровне модуля?Как указать зависимости статической библиотеки c/C++?

Я знаю, что для общей библиотеки (.so), мы можем использовать objdump или readelf сделать это:

objdump -p test.so 

или

readelf -d test.so 

я могу получить что-то вроде

НУЖНО libOne.so

ТРЕБУЕТСЯ libc.so.6

Но для статической библиотеки, я могу только получить зависимости в символ уровня, например, запустив

objdump -T test.a 

я получить некоторые вещи как:

00000000 DF UND 00000000 QByteArray :: середине (интермедиат, ИНТ) константный

00000000 DF UND 00000000 QUrl :: fromEncoded (QByteArray Const &)

00000000 DF UND 00000000 QFileInfo :: Filename() Const

Но мне нужна информация в модуле уровня, Кто-нибудь знает, как получить эту информацию?

ответ

3

Статическая библиотека имеет нет такого списка зависимостей.

Статическая библиотека - это не что иное, как архив объектных файлов. И поскольку объектные файлы не знают, от каких библиотек они зависят, также не может быть статическая библиотека.

+1

Я бы сказал, причина в том, что статическая библиотека не связана ** **. Поэтому никто в цепочке сборки до сих пор не отвечал за добавление к нему такой информации. –

+0

@Jan Smrčina @ Какой-то программист-чувак Но как можно создать статическую библиотеку, не зная эту информацию? Например, библиотека A использует функцию, определенную в другой библиотеке B. Если мы не добавим что-то вроде '#include" B.h "', может ли быть создано A? В этом случае мы можем сказать, что А зависит от В? – bagebb

+0

@bagebb Как и любой другой файл объекта. Команда 'ar', используемая для создания статических библиотек, является простой и очень простой * ARchiver *. Для статических библиотек вам нужно следить за зависимостями и напрямую связываться с ними. Это не что-то, на что способен компоновщик, все, что он делает, - это в основном извлечение объектных файлов и связь с ними. –