wxwidgets 的静态链接与动态链接
下面的程序,用MDd可以通过编译连接并运行,但用MT,有下面的连接错误:
HelloWorld error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义
HelloWorld error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义
HelloWorld error LNK2005: __strdup 已经在 LIBCMT.lib(strdup.obj) 中定义
HelloWorld error LNK2005: __stricmp 已经在 LIBCMT.lib(stricmp.obj) 中定义
HelloWorld error LNK2005: __strnicmp 已经在 LIBCMT.lib(strnicmp.obj) 中定义
HelloWorld warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;使用 /NODEFAULTLIB:library
HelloWorld error LNK2005: _abort 已经在 LIBCMT.lib(abort.obj) 中定义
HelloWorld error LNK2005: _atoi 已经在 LIBCMT.lib(atox.obj) 中定义
HelloWorld error LNK2005: _calloc 已经在 LIBCMT.lib(calloc.obj) 中定义
HelloWorld error LNK2005: _exit 已经在 LIBCMT.lib(crt0dat.obj) 中定义
HelloWorld error LNK2005: _free 已经在 LIBCMT.lib(free.obj) 中定义
HelloWorld error LNK2005: _getenv 已经在 LIBCMT.lib(getenv.obj) 中定义
HelloWorld error LNK2005: _isalnum 已经在 LIBCMT.lib(_ctype.obj) 中定义
HelloWorld error LNK2005: _isalpha 已经在 LIBCMT.lib(_ctype.obj) 中定义
HelloWorld error LNK2005: _isdigit 已经在 LIBCMT.lib(_ctype.obj) 中定义
HelloWorld error LNK2005: _isspace 已经在 LIBCMT.lib(_ctype.obj) 中定义
HelloWorld error LNK2005: _malloc 已经在 LIBCMT.lib(malloc.obj) 中定义
HelloWorld error LNK2005: _memmove 已经在 LIBCMT.lib(memmove.obj) 中定义
HelloWorld error LNK2005: _realloc 已经在 LIBCMT.lib(realloc.obj) 中定义
HelloWorld error LNK2005: _setlocale 已经在 LIBCMT.lib(setlocal.obj) 中定义
HelloWorld error LNK2005: _strchr 已经在 LIBCMT.lib(strchr.obj) 中定义
HelloWorld error LNK2005: _strftime 已经在 LIBCMT.lib(strftime.obj) 中定义
HelloWorld error LNK2005: _strncmp 已经在 LIBCMT.lib(strncmp.obj) 中定义
HelloWorld error LNK2005: _strncpy 已经在 LIBCMT.lib(strncpy.obj) 中定义
HelloWorld error LNK2005: _strpbrk 已经在 LIBCMT.lib(strpbrk.obj) 中定义
HelloWorld error LNK2005: _tolower 已经在 LIBCMT.lib(tolower.obj) 中定义
HelloWorld error LNK2019: 无法解析的外部符号 "public: void __thiscall wxStringData::Free(void)" (?Free@wxStringData@@QAEXXZ) ,该符号在函数 "public: void __thiscall wxStringData::Unlock(void)" (?Unlock@wxStringData@@QAEXXZ) 中被引用
HelloWorld fatal error LNK1120: 1 个无法解析的外部命令
HelloWorld warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”规范)
/*
* hworld.cpp
* Hello world sample by Robert Roebling
*/
// For compilers that support precompilation, includes "wx/wx.h".
#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((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 wxWindows!" );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("This is a wxWindows Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION, this);
}