【问题标题】:wxWidgets LINK issue in Visual StudioVisual Studio 中的 wxWidgets LINK 问题
【发布时间】:2012-02-18 10:03:45
【问题描述】:

我是第一次尝试处理wxWidgets,我尝试编译下面的Hello World程序:

/*
 * hworld.cpp
 */

#include "wx/wx.h" 

class MyApp: public wxApp
{
    virtual bool OnInit();
};

class MyFrame: public wxFrame
{
public:

    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);

    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);

    DECLARE_EVENT_TABLE()
};

enum
{
    ID_Quit = 1,
    ID_About,
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(ID_Quit, MyFrame::OnQuit)
    EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50, 50),
                                  wxSize(450,340) );
    frame->Show(true);
    SetTopWindow(frame);
    return true;
} 

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame( NULL, -1, title, pos, size )
{
    wxMenu *menuFile = new wxMenu;

    menuFile->Append( ID_About, _("&About...") );
    menuFile->AppendSeparator();
    menuFile->Append( ID_Quit, _("E&xit") );

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, _("&File") );

    SetMenuBar( menuBar );

    CreateStatusBar();
    SetStatusText( _("Welcome to wxWidgets!") );
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(TRUE);
}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxMessageBox( _("This is a wxWidgets Hello world sample"),
                  _("About Hello World"),
                  wxOK | wxICON_INFORMATION, this);
}

编译器显示:

Error   1   error LNK2001: unresolved external symbol _WinMainCRTStartup    C:\Users\550\documents\visual studio 11\Projects\wxWidgitExample\wxWidgitExample\LINK
Error   2   error LNK1120: 1 unresolved externals   C:\Users\550\documents\visual studio 11\Projects\wxWidgitExample\Debug\wxWidgitExample.exe  1

有什么问题?我使用 MS Visual Studio,我想我需要使用 #pragma 指令?

【问题讨论】:

  • 能否提供调用编译链接的命令行?
  • 这是您第一次使用 wxWidgets。我已经使用它多年了,我应该推荐你也试试 Qt。你会发现 Qt 更可爱 ;-) 将 QtCreator 与 Qt 4.8 一起使用,尝试示例你会发现不同。

标签: c++ visual-studio wxwidgets visual-studio-2010


【解决方案1】:

尝试将wxDECLARE_APP(MyApp); 放在定义MyApp 的头文件中,将wxIMPLEMENT_APP(MyApp); 放在实现它的cpp 文件中。这些宏的描述可在documentation 中找到。

【讨论】:

    【解决方案2】:

    您遇到的链接器错误通常表明您的项目配置设置在 ansi 与 unicode 设置之间不匹配。如果您正在构建启用 unicode 的 wxApplication,请确保已定义 UNICODE_UNICODE

    windows unicode 应用程序的入口点是 wWinMainCRTStartup,其中作为非 unicode 应用程序的入口点是 WinMainCRTStartup。通常,当您构建框架时,wxWidgets 应该为您正确设置。

    为了帮助您解决未解决的错误,我会在您尝试构建时尝试将此开关传递给链接器。

    如果您的示例未使用 unicode,则使用 /ENTRY:WinMainCRTStartup

    如果您是使用 unicode 的示例,则使用/ENTRY:wWinMainCRTStartup

    【讨论】:

      【解决方案3】:

      在 Linker->System->SubSystem 下检查您的属性表。确保子系统是 Windows 而不是控制台。

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 2018-06-10
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 2012-03-29
        相关资源
        最近更新 更多