Что именно делает -rdynamic
(или --export-dynamic
на уровне компоновщика) и как оно связано с видимостью символа, как определено флагами -fvisibility*
или видимостью pragma
и __attribute__
s?
В --export-dynamic
ld (1) упоминается:
... Если вы используете "dlopen" для загрузки динамического объекта, который нужно вернуть назад к символам, определенным программой, а не к какой-либо другой динамической объект, то вам, вероятно, понадобится использовать этот параметр при связывании самой программы....
Я не уверен, что полностью понимаю это. Не могли бы вы привести пример, который не работает без -rdynamic
, но делает с ним?
Edit:
Я попытался скомпилировать несколько фиктивных библиотек (один файл, несколько файлов, различные уровни -O, некоторые межфункциональные вызовы, некоторые скрытые символы, некоторые видимые), с и без -rdynamic
, и до сих пор я был получение байт-идентичных выходов (при постоянном сохранении всех остальных флагов), что довольно озадачивает.