3
votes

Im creating my first program with C++ and wxwidgets. When I try to compile the project I get errors.

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

LNK1120 1 unresolved externals

I have compiled the wxwidgets my self in Visual Studio.

After compiling I created a new C++ empty project in Visual Studio.

I went to configuration and added includes directories:

Configuration properties -> C/C++ -> General -> Additional include directories:

C:\Users\user\source\repos\wxWidgets\include; C:\Users\user\source\repos\wxWidgets\include\msvc

Configuration properties -> Linker -> Additional Library Directories:

C:\Users\user\source\repos\wxWidgets\lib\vc_lib

Then I added 2 classes, cApp and cMain.

cApp.h

#pragma once

#include "wx/wx.h"
#include "cMain.h"

class cApp : public wxApp
{
public:
    cApp();
    ~cApp();

private: 
    cMain* m_frame1 = nullptr;

public: 
    virtual bool OnInit();
};

cApp.cpp

#include "cApp.h"

wxIMPLEMENT_APP(cApp);

cApp::cApp() {

}

cApp::~cApp() {

}

bool cApp::OnInit() {
    m_frame1 = new cMain();
    m_frame1->Show();

    return true;
}

cMain.h

#pragma once

#include "wx/wx.h"

class cMain : public wxFrame
{
public:
    cMain();
    ~cMain();
};

cMain.cpp

#include "cMain.h"

cMain::cMain() : wxFrame(nullptr, wxID_ANY, "MyProgram") {

}

cMain::~cMain() {

}
1
No, I dont have a int main(). Where can I define it? Im using wxWidgets.Europa
I only have the two classes. Im following this tutorial: youtube.com/watch?v=FOIbK4bJKS8Europa
I see from the documentation that wxWidgets is supposed to implement int main() for you. I am not sure why its not doing that.drescherjm
Yes, becuase of "wxIMPLEMENT_APP(cApp)".Europa
You seem to be missing DECLARE_APP(cApp) in your header for cApp. Not sure if that is needed its in the example code: https://wiki.wxwidgets.org/Hello_Worlddrescherjm

1 Answers

3
votes

You have 2 problems (after the edit due to the comment below) the following problem:

  1. You're building your application as a console mode application and not a GUI one. While it is possible to use wxWidgets from console applications too, this is probably not what you're trying to do, so ensure that the "Linker|System|SubSystem" option in the properties dialog of your project is set to "Windows".
  2. You don't have wxIMPLEMENT_APP(cApp); macro in your code. Again, it is perfectly possible to avoid it, but this is probably not your goal here, so just add this line. This macro is what defines main or WinMain for your application, depending on the platform.