Condividi tramite


Avviso degli strumenti del linker LNK4092

la sezione condivisa scrivibile 'section' contiene rilocazione; l'immagine potrebbe non essere eseguita correttamente

Il linker genera questo avviso ogni volta che si dispone di una sezione condivisa per avvisare l'utente di un problema potenzialmente grave.

Un modo per condividere i dati tra più processi consiste nel contrassegnare una sezione come "condivisa". Tuttavia, contrassegnare una sezione come condivisa può causare problemi. Ad esempio, si dispone di una DLL che contiene dichiarazioni simili a questa in una sezione dei dati condivisi:

int var = 1;
int *pvar = &var;

Il linker non è in grado di risolvere pvar perché il valore dipende dalla posizione in cui la DLL viene caricata in memoria, quindi inserisce un record di rilocazione nella DLL. Quando la DLL viene caricata in memoria, l'indirizzo di var può essere risolto e pvar assegnato. Se un altro processo carica la stessa DLL ma non può caricarla nello stesso indirizzo, la rilocazione per l'indirizzo di var verrà aggiornata per il secondo processo e lo spazio indirizzi del primo processo punterà all'indirizzo errato.