Upozornění linkerů LNK4049
symbol 'symbol' definovaný v 'filename.obj' je importován.
__declspec(dllimport) byl zadán pro symbol , i když je symbol definován v souboru objektu filename.obj na stejném obrázku. __declspec(dllimport)
Pokud chcete toto upozornění vyřešit, odeberte modifikátor.
Poznámky
Toto upozornění vygeneruje linker při definování symbolu v jednom souboru objektu a odkaz na něj pomocí modifikátoru __declspec(dllimport)
deklarace v jiné.
Upozornění LNK4049 je obecnější verze upozornění linkerů LNK4217. Linker vygeneruje upozornění LNK4049, když nedokáže určit, na kterou funkci nebo soubor objektu odkazoval na importovaný symbol.
Mezi běžné případy, kdy se místo LNK4217 vygenerují LNK4049:
Při použití parametru /INCREMENTAL .
Při použití možnosti /LTCG .
Pokud chcete vyřešit LNK4049, zkuste použít jeden z následujících postupů:
__declspec(dllimport)
Odeberte modifikátor z předané deklarace symbolu, který aktivoval LNK4049. Symboly v binárním obrázku můžete vyhledat pomocí nástroje DUMPBIN . Přepínač DUMPBIN /SYMBOLS zobrazí tabulku symbolů COFF obrázku. Další informace o nástroji DUMPBIN naleznete v tématu DUMPBIN Reference.Dočasně zakažte přírůstkové propojení a optimalizaci celého programu. Při rekompilování aplikace vygeneruje upozornění LNK4217, který obsahuje název funkce, která odkazuje na importovaný symbol.
__declspec(dllimport)
Odeberte modifikátor deklarace z importovaného symbolu a podle potřeby znovu povolte přírůstkové propojení nebo optimalizaci celého programu.
I když se konečný vygenerovaný kód chová správně, kód vygenerovaný pro volání importované funkce je méně efektivní než přímé volání funkce. Toto upozornění se nezobrazí při kompilaci pomocí možnosti /clr .
Další informace o deklaracích dat importu a exportu naleznete v tématu dllexport, dllimport.
Příklad
Propojením následujících dvou modulů se vygenerují LNK4049. První modul vygeneruje soubor objektu obsahující jednu exportovanou funkci.
// LNK4049a.cpp
// compile with: /c
__declspec(dllexport) int func()
{
return 3;
}
Druhý modul vygeneruje soubor objektu obsahující předanou deklaraci funkce exportované v prvním modulu spolu s voláním této funkce uvnitř main
funkce. Propojení tohoto modulu s prvním modulem vygeneruje LNK4049. __declspec(dllimport)
Odeberte modifikátor z deklarace a vyřešte upozornění.
// 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();
}
Viz také
Upozornění linkerů LNK4217
Upozornění linkerů LNK4286
dllexport, dllimport