undefined reference to 'WinMain@16'
现象
一个C的项目,以64位模式编译时没有问题,切换到32位编译就报告错误:
undefined reference to 'WinMain@16'
原因
首先上原来的代码:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
ShellExecute(NULL,"open","taskkill"," /F /IM nginx.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM php-cgi.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM php.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM BeyondClass.exe",NULL,SW_HIDE);
return 0;
}
根据错误提示和网上找到的资料,说是因为这段代码没有main()函数导致。
解决
在代码中增加一个main函数:
#include <windows.h>
int main()
{
ShellExecute(NULL,"open","taskkill"," /F /IM nginx.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM php-cgi.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM php.exe",NULL,SW_HIDE);
ShellExecute(NULL,"open","taskkill"," /F /IM BeyondClass.exe",NULL,SW_HIDE);
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
main();
return 0;
}
再编译,OK,问题解决了。