управление видимостью символов библиотеки

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2559
ОС: Debian

управление видимостью символов библиотеки

Сообщение IMB »

Доброго дня!
Имеется следующий набор
- libA.a , blob поставляемый производителя SoC
- libB.so, blob поставляемый разработчиком сервиса, зависит от libA.a
- lib.C.so, разрабатываемая библиотека реализующая в том числе взаимодействие с сервисом через libB.so
- app, разрабатываемое приложение связанное с libC.so
Сейчас для libC.so приделывается ограничение отображения символов и все внутренние символы не нужные app скрываются через -Wl,--exclude-libs=ALL, но линковка app при этих условиях непроходит так как libB.so жалуется что не видит символы из libA.a.
Как можно libC.so сказать отображать символы из libA.so?
Спасибо.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: управление видимостью символов библиотеки

Сообщение Bizdelnick »

Вроде бы, самое простое и очевидное — вместо --exclude-libs=ALL перечислять список архивов за исключением libA.a.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: управление видимостью символов библиотеки

Сообщение IMB »

Да, это можно попробовать, а как быть если требуется обеспечить видимости только части символов?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: управление видимостью символов библиотеки

Сообщение Bizdelnick »

См. про --dynamic-list и --version-script.
Вот тут об этом рассказывается, например: http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.html
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: управление видимостью символов библиотеки

Сообщение IMB »

Опираясь на http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.html и https://stackoverflow.com/questions/8432431/ld-script-for-symbol-hidding-in-c создал version-file и указал его использование, после сборки библиотеки проверил, что она содержит нужные символы, но линковка с либой останавливается с сообщение '(.data.rel.ro+0x18): undefined reference to `typeinfo for ...'.
Буду разбираться дальше.
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: управление видимостью символов библиотеки

Сообщение IMB »

В неком виде получилось через -Wl,--exclude-libs=staticLib, важно - указывать надо имя используемое при линковке, а не полное, но срылись не все символы.
http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.html с использованием -Wl,--version-script=file скрытие более полное, но у меня при его использовании не становятся видимыми С++-specific типа vtable.
кто-либо может поделиться опытом использования VERSION-file применительно к C++ ?
Спасибо.

Результирующий размер библиотеки
- exclude-libs 7510769
- version-script 7323179
Добавлено (22:28):
благодаря https://stackoverflow.com/questions/8792587/in-gcc-how-can-i-export-all-typeinfo-symbols-for-a-shared-library-without-expor вроде решил через version-file
try exporting the symbol wildcards _ZTI* and _ZTN* from your version script.
я добавил _ZTIN8* (typeinfo)
Спасибо сказали:
Ответить