Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
symbool 'symbool' dat is gedefinieerd in 'filename.obj' wordt geïmporteerd
Opmerkingen
__declspec(dllimport) is opgegeven voor symbool , ook al is het symbool gedefinieerd in objectbestand filename.obj in dezelfde afbeelding. Verwijder de __declspec(dllimport) wijzigingsfunctie om deze waarschuwing op te lossen.
Deze waarschuwing wordt gegenereerd door de linker wanneer u een symbool in het ene objectbestand definieert en ernaar verwijst met behulp van de __declspec(dllimport) wijzigingsfunctie voor declaratie in een ander object.
Waarschuwing LNK4049 is een algemenere versie van Linker Tools Warning LNK4217. De linker genereert een waarschuwing LNK4049 wanneer er niet kan worden bepaald welk functie- of objectbestand naar het geïmporteerde symbool verwijst.
De veelvoorkomende gevallen waarin LNK4049 wordt gegenereerd in plaats van LNK4217 zijn:
Wanneer u de optie /INCREMENTAL gebruikt.
Wanneer u de optie /LTCG gebruikt.
Probeer een van de volgende procedures om LNK4049 op te lossen:
Verwijder de
__declspec(dllimport)modifier uit de voorwaardelijke declaratie van het symbool die LNK4049 heeft veroorzaakt. U kunt zoeken naar symbolen in een binaire afbeelding met behulp van het hulpprogramma DUMPBIN . Met de schakeloptie DUMPBIN /SYMBOLS wordt de tabel met het COFF-symbool van de afbeelding weergegeven. Zie DUMPBIN-naslaginformatie voor meer informatie over het hulpprogramma DUMPBIN.Schakel incrementeel koppelen en optimalisatie van hele programma's tijdelijk uit. Wanneer de toepassing opnieuw wordt gecompileerd, genereert de toepassing Waarschuwing LNK4217, die de naam bevat van de functie die verwijst naar het geïmporteerde symbool. Verwijder de
__declspec(dllimport)wijzigingsfunctie voor declaratie uit het geïmporteerde symbool en schakel incrementele koppeling of optimalisatie van hele programma's indien nodig opnieuw in.
Hoewel de uiteindelijke gegenereerde code correct werkt, is de code die is gegenereerd om de geïmporteerde functie aan te roepen minder efficiënt dan het rechtstreeks aanroepen van de functie. Deze waarschuwing wordt niet weergegeven wanneer u compileert met behulp van de optie /clr .
Zie dllexport, dllimport voor meer informatie over import- en exportgegevensdeclaraties.
Example
Als u de volgende twee modules koppelt, zal LNK4049 gegenereerd worden. De eerste module genereert een objectbestand met één geëxporteerde functie.
// LNK4049a.cpp
// compile with: /c
__declspec(dllexport) int func()
{
return 3;
}
De tweede module genereert een objectbestand met een doorstuurdeclaratie naar de functie die in de eerste module is geëxporteerd, samen met een aanroep naar deze functie in de main functie. Als u deze module koppelt aan de eerste module, wordt LNK4049 gegenereerd. Verwijder de __declspec(dllimport) wijzigingsfunctie uit de declaratie om de waarschuwing op te lossen.
// 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();
}
Zie ook
Linker-tools Waarschuwing LNK4217
Linkerhulpprogramma's Waarschuwing LNK4286
dllexport, dllimport