Beim Kompilieren eines SDL2-Projekts in Visual Studio 2015 stoßen Entwickler möglicherweise auf unaufgelöste externe Symbole __imp__fprintf und __imp____iob_func.
Das zugrunde liegende Problem ergibt sich aus der Tatsache, dass Visual Studio 2015 stdin, stderr und stdout anders definiert als frühere Versionen. In älteren Visual Studio-Versionen wurden diese als Makros definiert, die auf Arrays verweisen, die die drei Standard-E/A-Streams enthalten. In Visual Studio 2015 werden sie jedoch mit __acrt_iob_func() definiert.
Daher stößt Code, der mit früheren Visual Studio-Versionen kompiliert wurde und auf den älteren Definitionen von stdin, stderr und stdout basiert, auf eine undefinierte Referenz zu __iob_func() beim Verknüpfen mit einer Bibliothek (.lib), die mit Visual Studio kompiliert wurde 2015.
Um das Problem zu beheben, besteht eine Lösung darin, __iob_func() manuell als Array zu definieren, das {stdin, stdout, *stderr} enthält. Dadurch wird sichergestellt, dass der Code über den erforderlichen Verweis auf __iob_func() verfügt.
Darüber hinaus kann jeder Code, der stdio-Funktionen verwendet (z. B. scanf, printf), auch auf unaufgelöste externe Symbole stoßen. Um dieses Problem zu beheben, können Entwickler die Datei „legacy_stdio_definitions.lib“ zu ihren Linker-Optionen hinzufügen. Diese Bibliothek stellt Definitionen für die fehlenden stdio-Funktionen bereit.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinem SDL2 Visual Studio 2015-Projekt die nicht aufgelösten externen Symbole __imp__fprintf und __imp____iob_func?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!