Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das in "filename.obj" definierte Symbol "Symbol" wird importiert.
Hinweise
__declspec(dllimport) wurde für das Symbol angegeben, obwohl das Symbol in der Objektdatei filename.obj in demselben Bild definiert ist. Entfernen Sie den __declspec(dllimport) Modifizierer, um diese Warnung zu beheben.
Diese Warnung wird vom Linker generiert, wenn Sie ein Symbol in einer Objektdatei definieren und mithilfe des __declspec(dllimport) Deklarationsmodifizierers in einer anderen referenzieren.
Warnung LNK4049 ist eine allgemeinere Version von Linker Tools Warning LNK4217. Der Linker generiert Warnungen LNK4049, wenn nicht bestimmt werden kann, auf welche Funktion oder Objektdatei auf das importierte Symbol verwiesen wird.
Die gängigen Fälle, in denen LNK4049 anstelle von LNK4217 generiert werden, sind:
Bei Verwendung der Option "/INKREMENT"
Bei Verwendung der Option "/LTCG ".
Um LNK4049 zu beheben, versuchen Sie es mit einem der folgenden Verfahren:
Entfernen Sie den
__declspec(dllimport)Modifizierer aus der Vorwärtsdeklaration des Symbols, das LNK4049 ausgelöst hat. Sie können mithilfe des DUMPBIN-Hilfsprogramms nach Symbolen in einem binären Bild suchen. Der Schalter DUMPBIN /SYMBOLS zeigt die COFF-Symboltabelle des Bilds an. Weitere Informationen zum DUMPBIN-Hilfsprogramm finden Sie in der DUMPBIN-Referenz.Deaktivieren Sie vorübergehend die inkrementelle Verknüpfung und die Optimierung des gesamten Programms. Beim erneuten Kompilieren generiert die Anwendung warnungs-LNK4217, die den Namen der Funktion enthält, die auf das importierte Symbol verweist. Entfernen Sie den
__declspec(dllimport)Deklarationsmodifizierer aus dem importierten Symbol, und aktivieren Sie die inkrementelle Verknüpfung oder Optimierung des gesamten Programms nach Bedarf erneut.
Obwohl sich der endgültige generierte Code korrekt verhält, ist der generierte Code zum Aufrufen der importierten Funktion weniger effizient als das direkte Aufrufen der Funktion. Diese Warnung wird nicht angezeigt, wenn Sie die Option "/clr " kompilieren.
Weitere Informationen zum Importieren und Exportieren von Datendeklarationen finden Sie unter dllexport, dllimport.
Beispiel
Durch das Verknüpfen der folgenden beiden Module wird LNK4049 generiert. Das erste Modul generiert eine Objektdatei, die eine einzelne exportierte Funktion enthält.
// LNK4049a.cpp
// compile with: /c
__declspec(dllexport) int func()
{
return 3;
}
Das zweite Modul generiert eine Objektdatei, die eine Weiterleitungsdeklaration an die im ersten Modul exportierte Funktion enthält, zusammen mit einem Aufruf dieser Funktion innerhalb der main Funktion. Wenn Sie dieses Modul mit dem ersten Modul verknüpfen, wird LNK4049 generiert. Entfernen Sie den __declspec(dllimport) Modifizierer aus der Deklaration, um die Warnung zu beheben.
// LNK4049b.cpp
// compile with: /link /WX /LTCG LNK4049a.obj
// LNK4049 expected
__declspec(dllimport) int func();
// try the following line instead
// int func();
int main()
{
return func();
}
Siehe auch
Linkertoolwarnung LNK4217
Linkertoolwarnung LNK4286
dllexport, dllimport