gpt4 book ai didi

C++ : wxWidget HelloWorld

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:21 28 4
gpt4 key购买 nike

在编译我的 wxWidget HelloWorld 应用程序时,出现以下错误:

Warning 1   warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library   wxWidget__HelloWorld    wxWidget__HelloWorld
Error 2 error LNK2001: unresolved external symbol "public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z) minimal.obj wxWidget__HelloWorld
Error 3 error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsole::OnAssertFailure(wchar_t const *,int,wchar_t const *,wchar_t const *,wchar_t const *)" (?OnAssertFailure@wxAppConsole@@UAEXPB_WH000@Z) minimal.obj wxWidget__HelloWorld
Error 4 error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsole::OnAssert(wchar_t const *,int,wchar_t const *,wchar_t const *)" (?OnAssert@wxAppConsole@@UAEXPB_WH00@Z) minimal.obj wxWidget__HelloWorld
Error 5 error LNK2019: unresolved external symbol "protected: void __thiscall wxStringBase::InitWith(wchar_t const *,unsigned int,unsigned int)" (?InitWith@wxStringBase@@IAEXPB_WII@Z) referenced in function "public: __thiscall wxStringBase::wxStringBase(wchar_t const *)" (??0wxStringBase@@QAE@PB_W@Z) minimal.obj wxWidget__HelloWorld
Error 6 error LNK2019: unresolved external symbol "public: int __cdecl wxString::Printf(wchar_t const *,...)" (?Printf@wxString@@QAAHPB_WZZ) referenced in function "public: void __thiscall MyFrame::OnAbout(class wxCommandEvent &)" (?OnAbout@MyFrame@@QAEXAAVwxCommandEvent@@@Z) minimal.obj wxWidget__HelloWorld
Error 7 error LNK2001: unresolved external symbol "wchar_t const * const wxEmptyString" (?wxEmptyString@@3PB_WB) minimal.obj wxWidget__HelloWorld
Error 8 error LNK2001: unresolved external symbol "wchar_t const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QB_WB) minimal.obj wxWidget__HelloWorld
Error 9 error LNK2001: unresolved external symbol "wchar_t const * const wxFrameNameStr" (?wxFrameNameStr@@3QB_WB) minimal.obj wxWidget__HelloWorld
Error 10 error LNK2019: unresolved external symbol "void __cdecl wxOnAssert(wchar_t const *,int,char const *,wchar_t const *,wchar_t const *)" (?wxOnAssert@@YAXPB_WHPBD00@Z) referenced in function "public: __thiscall wxStringBase::wxStringBase(class wxStringBase const &)" (??0wxStringBase@@QAE@ABV0@@Z) minimal.obj wxWidget__HelloWorld
Error 11 fatal error LNK1120: 9 unresolved externals F:\C++\_2008_\wxWidget__HelloWorld\Debug\wxWidget__HelloWorld.exe wxWidget__HelloWorld

我的源码如下:

//

Name:        minimal.cpp
// Purpose: Minimal wxWidgets sample
// Author: Julian Smart

#include "wx/wx.h"

// Declare the application class
class MyApp : public wxApp
{
public:
// Called on application startup
virtual bool OnInit();
};

// Declare our main frame class
class MyFrame : public wxFrame
{
public:
// Constructor
MyFrame(const wxString& title);

// Event handlers
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);

private:
// This class handles events
DECLARE_EVENT_TABLE()
};

// Implements MyApp& GetApp()
DECLARE_APP(MyApp)

// Give wxWidgets the means to create a MyApp object
IMPLEMENT_APP(MyApp)

// Initialize the application
bool MyApp::OnInit()
{
// Create the main application window
MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));

// Show it
frame->Show(true);

// Start the event loop
return true;
}

// Event table for MyFrame
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
END_EVENT_TABLE()

void MyFrame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg.Printf(wxT("Hello and welcome to %s"),
wxVERSION_STRING);


wxMessageBox(msg, wxT("About Minimal"),
wxOK | wxICON_INFORMATION, this);
}

void MyFrame::OnQuit(wxCommandEvent& event)
{
// Destroy the frame
Close();
}

#include "mondrian.xpm"

MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title)
{
// Set the frame icon
SetIcon(wxIcon(mondrian_xpm));

// Create a menu bar
wxMenu *fileMenu = new wxMenu;

// The "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"),
wxT("Show about dialog"));

fileMenu->Append(wxID_EXIT, wxT("E&xit\tAlt-X"),
wxT("Quit this program"));

// Now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&File"));
menuBar->Append(helpMenu, wxT("&Help"));

// ... and attach this menu bar to the frame
SetMenuBar(menuBar);

// Create a status bar just for fun
CreateStatusBar(2);
SetStatusText(wxT("Welcome to wxWidgets!"));
}

缺少什么?

最佳答案

确保您的项目设置与所有依赖项正在使用的设置相匹配(实际上您应该匹配依赖项:))。

可能导致 MS 工具链链接问题的设置(除了明显的根本不链接库之外):

  • 使用unicode/多字节字符集
  • 将 wchar_t 视为内置类型。

当您知道那个该死的 unresolved-wchar_t*-containing-symbol 在您刚刚链接到的该死的库中时,这可能是这两个中的一个。

  • 运行时(多/单线程 [调试] [dll])。

这就是您的 LIBCMTD 警告的原因。以及缺少/冲突的符号,如 __free 或 malloc 或其他标准外观的东西。奇怪的是,当你跨越 dll 边界时,甚至在空地方,如果你设法将 2 个不同的运行时链接到一个二进制文件中,甚至在空的地方都没有崩溃(我已经看到了!)。

  • 可疑的预处理器定义,如 _LIB、_DLL、QT_DLL 等。

一些库使用它们来决定代码是静态链接还是动态链接。它们通常会影响 lib 或 dll 附带的 header 。你必须知道你是否需要它们。 RTFM 或查看这些工作示例项目的配置。

所以对于你的问题,首先确保你添加了你必须的任何 wxWidget 库(以及它们需要的任何依赖项)。搜索任何缺失的符号,让谷歌指导你。有人会遇到同样的问题,并且会在自己弄清楚之前将其张贴在某个地方。

一个好的搜索词是

virtual bool __thiscall wxApp::Initialize

运行时需要特别小心。当您获得所需的所有库,但收到 libcmt* 或 msvc* 警告或冲突时,请检查所有项目设置并检查我列出的 4 个项目是否正确且一致。如果您没有自己构建它们,那么您也必须了解它们的依赖关系。使用链接器详细信息标志也可以准确查看谁带来了不需要的运行时。

其他编译器和链接器设置也可能会影响事情,因此请仔细梳理它们。

其中大部分更改都需要干净地重新编译。

这就是构建 C++ 代码的乐趣。

关于C++ : wxWidget HelloWorld,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1409031/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com