2015-12-08 2 views
0

Как уже говорилось, я хочу, чтобы иметь возможность проверить, что общая библиотека, созданная Libtool, не хватает каких-либо символов,Как обнаружить отсутствующие символы в общей библиотеке с Libtool

Я написал библиотеку, которая построена как разделяемая библиотека, «A». Это зависит, в свою очередь, от другой библиотеки «B».

Другая библиотека «B» не соответствует строгому сперму и поэтому иногда вводит новые функции в младшие или патч-релизы.

Хотя я пытаюсь поставить соответствующий код #if B_LIB_VERSION >= 42 в код моей библиотеки, чтобы не пытаться вызвать функцию в библиотеке B, если она не будет доступна, по-видимому, иногда я ошибаюсь. Это вызывает ошибку при запуске программы.

Возможно ли с помощью libtool или любого другого инструмента создать список всех символов, которые не найдены в общей библиотеке или в любой из библиотек, которые он будет загружать?

ответ

0

Как уже говорилось, я хочу, чтобы иметь возможность проверить, что общая библиотека, созданная Libtool, не хватает каких-либо символов,

Это трудно сделать с разделяемыми библиотеками, так как они предназначены для допускают позднее разрешение символа. Если вы не используете функции типа dlopen, вы можете создавать статические исполняемые файлы из статических версий A и B и искать отсутствующие символы.

Другая библиотека «B» не соответствует строгому сперму и поэтому иногда вводит новые функции в младшие или патч-релизы.

Я серьезно рассмотрю вопрос о поиске замены библиотеки, чем иметь дело с их dependency issues.

Возможно ли с помощью libtool или любого другого инструмента создать список всех символов, которые не найдены в общей библиотеке или в любой из библиотек, которые она будет загружать?

Нет, не совсем. nm предоставит вам список символов, которые не определены (и указаны) в общей библиотеке. objdump может также использовать. В linux ldd может сделать то, что вам нужно. Но обычно есть no way of knowing exactly what a shared library loads, даже без учета dlopen.

libltdl может быть полезным, если вы должны придерживаться неверной библиотеки. По крайней мере, вы можете выяснить во время выполнения, если libB.42 имеет символ xyz или нет. Это не так просто, как условный код.

Смежные вопросы