【转】MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC...
时间: 2024-05-09 16:16:02 浏览: 206
这个错误一般是因为你的程序入口点不正确引起的。在 Windows 中,程序的入口点可以是 `WinMain` 或 `main` 函数。而在 Visual Studio 中,如果你创建的是一个 GUI 应用程序,那么入口点应该是 `WinMain` 函数,如果创建的是一个控制台应用程序,那么入口点应该是 `main` 函数。
解决方法:
1. 如果你创建的是 GUI 应用程序,那么你需要在程序中定义 `WinMain` 函数,例如:
```
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// TODO: 在此处添加代码。
return 0;
}
```
2. 如果你创建的是控制台应用程序,那么你需要在程序中定义 `main` 函数,例如:
```
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
```
3. 如果你已经定义了正确的入口点函数,但是仍然出现这个错误,那么可能是因为你的编译选项不正确导致的。你可以尝试在项目属性中修改编译选项,例如在“C/C++ -> 命令行”选项中添加 `/SUBSYSTEM:WINDOWS` 或 `/SUBSYSTEM:CONSOLE` 来指定程序的子系统类型。
相关问题
MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main和无法解析的外部符号 _WinMain@16两者反复报错
这个错误是链接错误,它表明你的程序缺少一个名为 main 或 WinMain 的入口点。这通常是因为你的程序没有定义 main 函数或 WinMain 函数,或者是由于你的编译器没有正确地设置项目属性导致的。你可以尝试在你的项目中添加一个 main 函数或 WinMain 函数,或者检查项目属性中的设置是否正确。
1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号
错误提示`LNK2019: 无法解析的外部符号 WinMain`通常是当你试图链接生成的可执行文件(exe),但是缺少主入口点`WinMain`。在Windows平台下,`WinMain`是MFC(Microsoft Foundation Classes)程序的标准窗口回调函数,用于初始化应用程序的生命周期。
以下是可能导致此问题的一些原因和解决方法:
1. **未包含正确的头文件**:
确保你在`.cpp`文件中包含了`windows.h`和`mfc/appwin32.h`或其他相关的MFC头文件,这会声明`WinMain`函数。
```cpp
#include <windows.h>
#include <mfcmfc/appwin32.h>
```
2. **缺少MFC库**:
如果你是用MFC编写的,确保已经将MFC库(如`mfc10u.lib` 或 `msvcrt.lib`,取决于你的VS版本)添加到链接器输入中。
3. **静态链接还是动态链接**:
检查项目的配置是否选择了正确的链接模式。如果是静态链接,你可能需要包含`afxres.h`;如果是动态链接,确保已经添加了MFC库。
4. **主函数定义错误**:
检查`WinMain`函数的原型是否有误,应类似这样:
```cpp
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow);
```
注意`APIENTRY`和函数返回类型。
5. **混淆第三方库**:
如果你从外部库导入了`invoke_main`,确保它不是与`WinMain`冲突的名称。
如果以上步骤都检查过了,还有问题,可能是你的源代码有问题或者项目设置出现了遗漏。尝试清理并重新建立项目,或者检查最近的代码更改,看看是否有影响`WinMain`暴露的问题。
阅读全文