Недавно я обнаружил вариант компоновщика "-Bsymbolic-functions" в GNU ld:
-Bsymbolic
When creating a shared library, bind references to global symbols to the
definition within the shared library, if any. Normally, it is possible
for a program linked against a shared library to override the definition
within the shared library.
This option is only meaningful on ELF platforms which support shared libraries.
-Bsymbolic-functions
When creating a shared library, bind references to global function symbols
to the definition within the shared library, if any.
This option is only meaningful on ELF platforms which support shared libraries.
Это, по-видимому, является инверсией опции GCC -fvisibility=hidden
, поскольку вместо предотвращения экспорта ссылочной функции другим общедоступным объектам она препятствует привязке внутренних библиотек библиотеки к этой функции к экспортируемой функции другого общего объекта. Я сообщил себе, что -Bsymbolic-functions
будет препятствовать созданию PLT-записей для функций, что является хорошим побочным эффектом.
-
Но мне было интересно, есть ли более мелкомасштабный контроль над этим, например перезаписывание
-Bsymbolic
для отдельных определений функций библиотеки. -
Должен ли я быть в курсе любых ошибок при использовании
-Bsymbolic-functions
? Я планирую использовать это, потому что-Bsymbolic
будет прерывать исключения, я думаю (это сделает так, что ссылки на объекты типаinfo не объединены, я думаю).
Спасибо!