Недавно я обнаружил опцию компоновщика "-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
, я думаю, будет нарушать исключения (я думаю, это сделает так, чтобы ссылки на объекты typeinfo не были унифицированными).
Спасибо!