Quando si utilizza gcc per creare una libreria condivisa, è possibile limitare la visibilità dei simboli usando -fvisibility = hidden. Ho anche appreso che puoi limitare la visibilità usando l'opzione version-script per ld.version-script e visibilità nascosta
Ora voglio sapere se è possibile combinarli. Dire che ho un programma con il seguente:
void foobar() {}
void say_hello() {}
Poi ho il file di script versione:
{
global:
foobar;
}
E compilo questo con: -fvisibility gcc = nascosto -Wl, - versione -script = test.c -shared -o libtest.so
Quando eseguo nm in seguito, trovo che nessun simbolo viene esportato. Esiste comunque la possibilità di impostare la visibilità predefinita su hidden e utilizzare lo script di versione (o qualcos'altro) per esportare i simboli?
Poiché il codice ho bisogno di usare questo su usi __attribute __ ((visibilità ("default"))) nel codice per contrassegnare la visibilità a volte, ma a volte si basa sulla sceneggiatura linker. Il modo in cui viene gestito in questo momento è solo un gigantesco trucco e sto cercando di capire se c'è un modo migliore per farlo. –
La tua domanda * ancora * non ha alcun senso. Puoi provare a spiegare quale sia la tua * reale * domanda migliore. –