Che cosa fa esattamente -rdynamic
(o --export-dynamic
a livello di linker) e come si riferisce alla visibilità dei simboli definita dai flag -fvisibility*
o dalla visibilità pragma
s e __attribute__
s?Che cosa fa esattamente `-rdynamic` e quando è esattamente necessario?
Per --export-dynamic
, ld(1) menzioni:
... Se si utilizza "dlopen" per caricare un oggetto dinamico che deve rinviare ai simboli definiti dal programma, piuttosto che qualche altra dinamica oggetto, quindi sarà probabilmente necessario utilizzare questa opzione quando si collega il programma stesso. ...
Non sono sicuro di averlo capito completamente. Potresti fornire un esempio che non funzioni senza -rdynamic
ma con esso?
Edit: realtà ho provato la compilazione di un paio di librerie fittizie (file singolo, multi-file, diversi livelli di -O, alcune chiamate inter-funzione, alcuni simboli nascosti, alcuni visibili), con e senza -rdynamic
, e fino ad ora ho ottenuto output identici al byte (mantenendo ovviamente tutte le altre bandiere ovviamente), il che è piuttosto sconcertante.
L'esempio rende perfettamente chiaro cosa significa la manpage. Molte grazie! – PSkocik