简体   繁体   中英

Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

Error:

Severity Code Description Project File Line Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 
Severity    Code    Description Project File    Line
Error   LNK1120 1 unresolved externals  

Code:

#include "windows.h"
#include "tchar.h"
#include "d3d9.h"
#pragma comment(lib, "d3d9.lib")

LPDIRECT3D9 pDirect3D=NULL; 
LPDIRECT3DDEVICE9 pDirect3DDevice=NULL; 
const int segment = 50;
const int NV = segment*13;
struct CUSTOMVERTEX
{
   float x, y, z, rhv;
   
   DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

LPDIRECT3DVERTEXBUFFER9 pVertexBuffer=NULL; 

HRESULT InitialDirect3D(HWND hvnd)
{
   if((pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))==NULL)
      return E_FAIL;
   D3DDISPLAYMODE Display;

   if(FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
      return E_FAIL;

   D3DPRESENT_PARAMETERS Direct3DParameter;
   ZeroMemory(&Direct3DParameter, sizeof Direct3DParameter);
 
   Direct3DParameter.Windowed=TRUE;
   Direct3DParameter.SwapEffect=D3DSWAPEFFECT_DISCARD;
   Direct3DParameter.BackBufferFormat=Display.Format;

   if(FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hvnd,
                                     D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                     &Direct3DParameter, &pDirect3DDevice)))
      return E_FAIL;
   return S_OK;
}
HRESULT RenderingDirect3D()
{
   if(pDirect3DDevice==NULL)
      return E_FAIL;
   pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(90, 150, 100), 1.f, 0);
   
   pDirect3DDevice->BeginScene();

   pDirect3DDevice->SetStreamSource(0, pVertexBuffer, 0, sizeof(CUSTOMVERTEX));
  
   pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);   

    pDirect3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, NV);
    pDirect3DDevice->EndScene();

   pDirect3DDevice->Present(NULL, NULL, NULL, NULL);

   return S_OK;
}

void DeleteDirect3D()
{
   if(pVertexBuffer)
       pVertexBuffer->Release();
   if(pDirect3DDevice)
       pDirect3DDevice->Release();
   if(pDirect3D)
       pDirect3D->Release();
}

HRESULT InitialVertexBuffer()
{
    float u = 0.0;
    int z = 0;
    float points[][2] = {
        {150,150},
        {125,100},
        {150,50},
        {200,50},
        {225,55},
        {285,60},
        {325,25},
        
        {342,30},
        {340,35},
        {340,40},
    
        {325,75},
        {300,125},
        {300,175},
        {305,250},
        {295,287},
        {257,347},
        {200,350},
        {150,325},
        {140,290},

        {142,282},
        {160,280},
        {165,286},
        
        {175,325},
        {215,340},
        {250,335},
        {275,300},
        {275,250},
        {255,200},
        {250,150},
        {275,100},
        {305,65},
        
        {275,85},
        {240,95},
        {215,85},
        {170,65},
        {140,90},
        {160,135},

        {160,150},
        {152.5,150},
        {150,150}
    };
        
    CUSTOMVERTEX Vertexes[NV*2];
    int i = 0;
    while( i < NV*2 )
    {
        u = 0.f;
        for(int j = 0; j < segment; j++)
        {
            Vertexes[i].x = (1-3*u+3*u*u-u*u*u)*points[z][0]+(3*u-6*u*u+3*u*u*u)*points[z+1][0]+(3*u*u-3*u*u*u)*points[z+2][0]+(u*u*u)*points[z+3][0];
            Vertexes[i].y = (1-3*u+3*u*u-u*u*u)*points[z][1]+(3*u-6*u*u+3*u*u*u)*points[z+1][1]+(3*u*u-3*u*u*u)*points[z+2][1]+(u*u*u)*points[z+3][1];
            Vertexes[i].z = 0.5f;
            Vertexes[i].color = 0x00ffffff;
            Vertexes[i].rhv = 1.f;
            u += (float)1/segment;
            i++;
            Vertexes[i].x = (1-3*u+3*u*u-u*u*u)*points[z][0]+(3*u-6*u*u+3*u*u*u)*points[z+1][0]+(3*u*u-3*u*u*u)*points[z+2][0]+(u*u*u)*points[z+3][0];
            Vertexes[i].y = (1-3*u+3*u*u-u*u*u)*points[z][1]+(3*u-6*u*u+3*u*u*u)*points[z+1][1]+(3*u*u-3*u*u*u)*points[z+2][1]+(u*u*u)*points[z+3][1];
            Vertexes[i].z = 0.5f;
            Vertexes[i].color = 0x00ffffff;
            Vertexes[i].rhv = 1.f;
            i++;
        }
        z += 3;
    }
        if(FAILED(pDirect3DDevice->CreateVertexBuffer(NV*2*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,
        D3DPOOL_DEFAULT, &pVertexBuffer, NULL)))
            return E_FAIL;
   
   void *pVB=NULL;
   if(FAILED(pVertexBuffer->Lock(0, sizeof Vertexes, (void**)&pVB, 0)))
      return E_FAIL;

   memcpy(pVB, Vertexes, sizeof Vertexes);
   
   pVertexBuffer->Unlock();
   
   return S_OK;
}

LRESULT CALLBACK MainWinProc(HWND hwnd, 
                             UINT msg,
                             WPARAM wparam, 
                             LPARAM lparam) 
{
   switch(msg)
   {
      case WM_PAINT:
            RenderingDirect3D();
            ValidateRect(hwnd, NULL);
            break;
      case WM_DESTROY:
            DeleteDirect3D();
            PostQuitMessage(0);
            return 0;
   }
   return DefWindowProc(hwnd, msg, wparam, lparam);
}

int WINAPI WinMain(HINSTANCE hinstance,
                   HINSTANCE hprevinstance,
                   LPSTR lpcmdline, 
                   int ncmdshow) 
{
   WNDCLASSEX windowsclass;
   HWND hwnd; 
   MSG msg; 
   //
   windowsclass.cbSize=sizeof(WNDCLASSEX);
   windowsclass.style=CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
   windowsclass.lpfnWndProc=MainWinProc;
   windowsclass.cbClsExtra=0;
   windowsclass.cbWndExtra=0;
   windowsclass.hInstance=hinstance;
   windowsclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
   windowsclass.hCursor=LoadCursor(NULL, IDC_ARROW);
   windowsclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
   windowsclass.lpszMenuName=NULL;
   windowsclass.lpszClassName=_T("WINDOWSCLASS");
   windowsclass.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
   
   if(!RegisterClassEx(&windowsclass))
      return 0;
   
   if(!(hwnd=CreateWindowEx(
      NULL,
      _T("WINDOWSCLASS"), 
      _T("Desenam litera G"), 
      WS_OVERLAPPEDWINDOW|WS_VISIBLE, 
      CW_USEDEFAULT, 0, 
      CW_USEDEFAULT, 0, 
      NULL, 
      NULL, 
      hinstance, 
      NULL))) 
      return 0;

   if(SUCCEEDED(InitialDirect3D(hwnd)))
   {
      if(SUCCEEDED(InitialVertexBuffer()))
      {
         ShowWindow(hwnd, SW_SHOWDEFAULT); 
         UpdateWindow(hwnd); 
         ZeroMemory(&msg, sizeof msg);
         while(msg.message!=WM_QUIT)
         {
            if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
            }
            else
               RenderingDirect3D();
         }
      }
   }

   return msg.wParam;
}

Check project configuration. Linker<\/strong> -> System<\/strong> -> SubSystem<\/strong> should be Windows<\/strong> .

"

If you use CMake you have to set WIN32<\/strong> flag in add_executable<\/code>

add_executable(${name} WIN32 ${source_files})

I had same Problem when i was trying to create executable from program that having no main() method. When i included sample main() method like this

int main(){
  return 0;
}

Right click on project. Properties->Configuration Properties->General->Linker.

Under System: SubSystem = Windows (\/SUBSYSTEM:WINDOWS) Under Advanced: EntryPoint = main

I faced the same problem too and I found out that I selected "new Win32 application" instead of "new Win32 console application". Problem solved when I switched. Hope this can help you.

"

Similar to @仲耀晖 I had the wrong application type configured for a dll. I guess that the project type changed due to some bad copy pasting, as @Daniel Struhl suggested.

How to verify: Right click on the project -> properties -> Configuration Properties -> General -> Project Defaults -> Configuration Type .

Check if this field contains the correct type, eg "Dynamic Library (.dll)" in case the project is a dll.

This is an edge case, but you can also get this error if you are building an MFC application with CMake.

just add:

int main()
{
    //you can leave it empty
    return 0;
}

Select the project. Properties->Configuration Properties->Linker->System.

Under System: SubSystem = Console(\/SUBSYSTEM:CONSOLE)

This worked for me:

I was making a console app, so I set it to "Console".

I had to #include <tchar.h> in my windows service application. I left it as a windows console type subsystem. The "Character Set" was set to UNICODE.

"

或只使用main()而不是WinMain

Solution for me is: I clean both the solution and the project. And just rebuild the project. This error happens because I tried to delete the main file (only keep library files) in the previous build so at the current build the old stuff is still kept in the built directory. That's why unresolved things happened. "unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) "

旧线程,但对我来说,当我将 int main(void) 重命名为 int wmain(void) 并从 cmake 的 add_executable() 中删除 WIN23 时,它开始工作(在遵循上述所有建议之后)。

"

If it is a windows system, then it may be because you are using 32 bit winpcap library in a 64 bit pc or vie versa. If it is a 64 bit pc then copy the winpcap library and header packet.lib and wpcap.lib from winpcap/lib/x64 to the winpcap/lib directory and overwrite the existing

The problem might originate from a macro instruction in SDL_main.h

Mostly it achieves their goal, but on my platform it created problems, rather than solved them. I added a 2nd line in SDL_main.h, and for me all problems were gone.

#define main SDL_main    //Original line. Renames main(){} to SDL_main(){}. 

#define main main        //Added line. Undo the renaming.

I got the same error because I created a new object from a templated class using the template name without specifying the type explicitly like this:

int main()
{

    MyClass<T> Test2(5.60, 6.6); <- This is wrong
           ^^^
    return 0;
}

I deleted the file with main() function in my project when I wanted to change project type to static library.

I Forgot to change Properties -> General -> Configuration Type

from

Application(.exe)

to

Static Library (.lib)

This too gave me the same error.

for me adding .dll file to my project folder solved this error. but game me another error: "unresolved external symbol main referenced in function ..." and I solved this by following this answer. https://stackoverflow.com/a/50087608/10903596 or in short adding #define SDL_MAIN_HANDLED in my main file or file containing main function.

I wanted to start working with SDL library. After setting and checking the include and library paths for numerous times, I came across the answer by Rinus Verdult here. I added this line after the #include lines and it worked.

#define main main

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM