Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
symbolen "symbol" som definieras i "filename.obj" importeras
Anmärkningar
__declspec(dllimport) angavs för symbol trots att symbolen definieras i objektfilen filename.obj i samma bild.
__declspec(dllimport) Ta bort modifieraren för att lösa den här varningen.
Den här varningen genereras av länkaren när du definierar en symbol i ett objektfil och refererar till den med hjälp av __declspec(dllimport) deklarationsmodifieraren i en annan.
Varning LNK4049 är en mer allmän version av Linker Tools Varning LNK4217. Länkaren genererar en varning LNK4049 när den inte kan avgöra vilken funktion eller objektfil som refererade till den importerade symbolen.
Vanliga fall där LNK4049 genereras i stället för LNK4217 är:
När du använder alternativet /INCREMENTAL .
När du använder alternativet /LTCG .
Prova någon av följande procedurer för att lösa LNK4049:
__declspec(dllimport)Ta bort modifieraren från den framåtriktade deklarationen för symbolen som utlöste LNK4049. Du kan söka efter symboler i en binär bild med hjälp av dumpbin-verktyget . Dumpbin/SYMBOLS-växeln visar COFF-symboltabellen för bilden. Mer information om DUMPBIN-verktyget finns i DUMPBIN-referens.Inaktivera tillfälligt inkrementell länkning och optimering av hela programmet. När programmet omkompileras genereras Varning LNK4217, som innehåller namnet på den funktion som refererar till den importerade symbolen. Ta bort deklarationsmodifieraren
__declspec(dllimport)från den importerade symbolen och återaktivera inkrementell länkning eller optimering av hela programmet efter behov.
Även om den slutliga genererade koden fungerar korrekt är koden som genereras för att anropa den importerade funktionen mindre effektiv än att anropa funktionen direkt. Den här varningen visas inte när du kompilerar med hjälp av alternativet /clr .
Mer information om import- och exportdatadeklarationer finns i dllexport, dllimport.
Example
Om du länkar följande två moduler genereras LNK4049. Den första modulen genererar en objektfil som innehåller en enda exporterad funktion.
// LNK4049a.cpp
// compile with: /c
__declspec(dllexport) int func()
{
return 3;
}
Den andra modulen genererar en objektfil som innehåller en framåtdeklaration till funktionen som exporteras i den första modulen, tillsammans med ett anrop till den här funktionen i main funktionen. Om du länkar den här modulen till den första modulen genereras LNK4049.
__declspec(dllimport) Ta bort modifieraren från deklarationen för att lösa varningen.
// 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();
}
Se även
Varningsmeddelande från länkverktyg LNK4217
Linker Tools Varning LNK4286
dllexport, dllimport