Bene, ora che si menziona il nm di Unix, posso individuare la risoluzione del simbolo.
I file eseguibili possono fare riferimento a entità che non sono definite al loro interno. Ad esempio, variabili o procedure su librerie condivise. Quelle entità sono identificate da simboli esterni. L'eseguibile potrebbe anche avere simboli interni a cui è possibile fare riferimento da file esterni, come nel caso, ovviamente, delle librerie.
risoluzione simbolo, in questo contesto, è, una volta che un programma è stato caricato in memoria, assegnazione di indirizzi propri di ogni entità esterne si riferisce. Questo significa cambiare ogni posizione nel programma caricato dove è stato fatto un riferimento a un simbolo esterno.
Questi indirizzi dipenderanno da dove, nella memoria, è stato caricato il codice con i simboli esterni.
In Unix, la modalità di compilazione di default per i programmi è quello di utilizzare i sistemi di libreria condivisa, invece di pre-linking tutto il necessario nel file eseguibile. Quando si compila un programma con gcc
, ad esempio, si passa il flag -static
se si desidera che sia compilato staticamente, anziché avere riferimenti simbolici non risolti.
Cercare "librerie condivise" per ulteriori informazioni.
fonte
2009-07-24 02:33:07
ha un senso, vi ringrazio molto. Cercherò anche "librerie condivise". Avete dei libri che potreste raccomandare per saperne di più su questo? –
Il miglior libro che conosca sull'argomento è [_Linkers and Loaders_ di John R. Levine] (http://rads.stackoverflow.com/amzn/click/1558604960). – alanc