Freigeben über


Linkertoolwarnung LNK4092

Der freigegebene schreibbare Abschnitt 'Abschnitt' enthält Umsetzungen; Anwendung kann möglicherweise nicht fehlerfrei ausgeführt werden

Der Linker gibt diese Warnung stets bei Vorhandensein eines gemeinsam genutzten Abschnitts aus, der ernsthafte Probleme verursachen könnte.

Eine Möglichkeit, Daten zwischen mehreren Prozessen zu nutzen, besteht darin, einen Abschnitt als "freigegeben" zu kennzeichnen. Eine derartige Kennzeichnung eines Abschnitts kann jedoch zu Problemen führen. Angenommen, eine DLL enthält in einem freigegebenen Datenabschnitt Deklarationen wie die folgenden:

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

In diesem Fall kann der Linker pvar nicht auflösen, da der Wert davon abhängt, an welcher Stelle die DLL im Arbeitsspeicher geladen wird. Folglich wird ein Umsetzungseintrag in die DLL eingefügt. Wenn die DLL in den Arbeitsspeicher geladen wird, kann die Adresse von var aufgelöst und pvar zugewiesen werden. Falls dieselbe DLL von einem anderen Prozess, jedoch nicht an derselben Adresse, geladen wird, wird die Umsetzung für die var-Adresse für den zweiten Prozess aktualisiert, und der Adressbereich des ersten Prozesses verweist auf die falsche Adresse.