Доброго дня!
Имеется следующий набор
- 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: управление видимостью символов библиотеки
Вроде бы, самое простое и очевидное — вместо --exclude-libs=ALL перечислять список архивов за исключением libA.a.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: управление видимостью символов библиотеки
Да, это можно попробовать, а как быть если требуется обеспечить видимости только части символов?
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: управление видимостью символов библиотеки
См. про --dynamic-list и --version-script.
Вот тут об этом рассказывается, например: http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.html
Вот тут об этом рассказывается, например: http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.html
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: управление видимостью символов библиотеки
Опираясь на 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 ...'.
Буду разбираться дальше.
Буду разбираться дальше.
Re: управление видимостью символов библиотеки
В неком виде получилось через -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
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я добавил _ZTIN8* (typeinfo)try exporting the symbol wildcards _ZTI* and _ZTN* from your version script.