此代码:
#include <windows.h>
int WINAPI _WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow);
此输出结果:
LNK1120: 1 unresolved externals
LNK2019: unresolved external symbol _WinMain@16 reference in function "int _cdecl invoke_main (void)" (? invoke_main@@Y AHZX)
有人可以告诉我这意味着什么以及如何解决它?
答案 0 :(得分:3)
LNK1120:1个未解析的外部
链接程序时,一个或多个符号未解析。稍后会详细介绍。
LNK2019:函数“int _cdecl invoke_main(void)”中未解析的外部符号_WinMain @ 16引用(?invoke_main @@ Y AHZX)
将缺少的符号之一命名为_WinMain@16
。 @ 16最终意味着对自己来说是一个相当长的答案。最好通过您选择的网络搜索查找“Name Mangling”和“Calling Convention”。
至于为什么_WinMain
缺失,
int WINAPI _WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow);
只表示程序员向其他地方的编译器保证
int WINAPI _WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// does stuff
return resultOfStuff;
}
存在。
编译器会非常满意这个承诺并继续前进,相信程序员会在文件或其他文件中的某个稍后点处擅长。
一旦将所有代码编译成目标文件,链接器就会出现并尝试将各个部分组合到一个程序或库中。它遍历所有与承诺名称匹配的目标文件和承诺项目的地址。
如果程序员在撒谎,那么链接器将找不到承诺的函数,将没有要使用的地址,并将返回一条错误消息,指出函数丢失。
解决方案:实现该功能。