【问题标题】:VC++, linking error with wxWidgets, x64VC++,与 wxWidgets 的链接错误,x64
【发布时间】:2011-08-23 20:00:20
【问题描述】:

我正在使用 wxWidgets 2.8 在 Windows 7 x64 上编译 VC++ 10 应用程序。这就是我的错误。代码是使用 wxFormBuilder 生成的。

更新:我也尝试在 32 位机器上运行它,但仍然遇到同样的问题。

我不知道我错过了哪些 wxwidgets 库,或者我做错了什么设置。在 Debug 和 Release 模式下都试过了。

如果有人能指出一些提示,我将不胜感激!关注这个问题有一段时间了。


1>WelcomeDlg.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
1>ConsoleDlg.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
1>ControlDialog.obj : error LNK2019: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B) referenced in function "public: void __cdecl ControlDialog::loadFile(class std::basic_string,class std::allocator >)" (?loadFile@ControlDialog@@QEAAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
1>MainFrame.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
1>MainFrame.obj : error LNK2019: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB) referenced in function "public: __cdecl MainFrame::MainFrame(class wxWindow *,class UIApp *)" (??0MainFrame@@QEAA@PEAVwxWindow@@PEAVUIApp@@@Z)
1>UIApp.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>VISUI.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>WelcomeDlg.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>ConsoleDlg.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>ControlDialog.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>Helper.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxStringBase::npos" (?npos@wxStringBase@@2_KB)
1>MainFrame.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>UIApp.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>VISUI.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>WelcomeDlg.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>ConsoleDlg.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>ControlDialog.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>Helper.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "char const * const wxEmptyString" (?wxEmptyString@@3PEBDEB)
1>ControlDialog.obj : error LNK2001: unresolved external symbol "class wxMBConvUTF8 & wxConvUTF8" (?wxConvUTF8@@3AEAVwxMBConvUTF8@@EA)
1>Helper.obj : error LNK2001: unresolved external symbol "class wxMBConvUTF8 & wxConvUTF8" (?wxConvUTF8@@3AEAVwxMBConvUTF8@@EA)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxGLCanvas::sm_eventTable" (?sm_eventTable@wxGLCanvas@@1UwxEventTable@@B)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "char const * const wxFrameNameStr" (?wxFrameNameStr@@3QBDB)
1>VISUI.obj : error LNK2001: unresolved external symbol "char const * const wxFrameNameStr" (?wxFrameNameStr@@3QBDB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "class wxPalette wxNullPalette" (?wxNullPalette@@3VwxPalette@@A)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "class wxCursor wxNullCursor" (?wxNullCursor@@3VwxCursor@@A)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "int const wxEVT_NULL" (?wxEVT_NULL@@3HB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "int const wxEVT_ERASE_BACKGROUND" (?wxEVT_ERASE_BACKGROUND@@3HB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "int const wxEVT_PAINT" (?wxEVT_PAINT@@3HB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "int const wxEVT_SIZE" (?wxEVT_SIZE@@3HB)
1>WxWidgetsWindow.obj : error LNK2001: unresolved external symbol "int const wxEVT_IDLE" (?wxEVT_IDLE@@3HB)

我要链接的库(64 位 wxwidgets 库)

wxbase28.lib wxmsw28_core.lib wxmsw28_richtext.lib wxmsw28_html.lib wxmsw28_gl.lib wxmsw28_adv.lib comctl32.lib Rpcrt4.lib

我的编译设置:

  • 将 Wchat_t 视为内置类型:是
  • 多线程调试 DLL

【问题讨论】:

  • 你的项目或make文件中是否包含了相应的库路径?
  • @Purnima 我有。我确定它找到了 .lib 文件。
  • 将名称添加到附加依赖项是不够的。您还必须确保链接器实际上可以在适当的文件夹中找到它们。您应该将文件夹添加到其他库目录

标签: c++ visual-c++ 64-bit wxwidgets unresolved-external


【解决方案1】:

我找到了解决我自己问题的方法。只需在此处发布以防有人遇到它。

这与 x64 或 x32 无关,也与 wxWidgets 无关。我只需要在标题中添加这两行(#include <wx/wx.h> 之前)

#define __WXMSW__
#define WXUSINGDLL

【讨论】:

【解决方案2】:

您是如何构建 wxWidgets 的?我的理解是您必须更改随 wxWidgets 分发的 Visual Studio 项目文件,以便它以 64 位模式构建。除非您的目标是 32 位模式。因此,请确保您的应用程序和 wxWidgets 的目标架构相同(即两者都应该是 32 位或 64 位)。

另外,我上次看了,wxWidgets 2.8 不支持 x64,如果你想以 x64 为目标,你需要升级到 wxWidgets 2.9。

您也可以查看以下链接:http://wiki.wxwidgets.org/Supporting_x64_and_Win32_within_one_solution

【讨论】:

  • 谢谢。我会尝试转换到 2.9(或更高版本),看看会发生什么
【解决方案3】:
1>WelcomeDlg.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)

这是一个极其奇怪的外部符号。 'class' 在那里做什么 - 它是一个 C++ 关键字。所有空间都在做什么?

我的猜测是在编译过程中发生了一些可怕的事情。您确定您甚至将源代码提交给 C++ 编译器吗?

【讨论】:

  • 其实那个代码是wxFormBuilder生成的。我无法控制。
  • 我对 wxFormBuilder 不熟悉。您将必须了解如何配置构建的编译步骤,因为我相信您的问题就在那里。请编辑您的问题以提及 wxFormBuilder。
  • @ravenspoint:C++ 编译器和链接器使用“名称修饰”来编码对象符号名称中有关名称空间、类和/或函数参数的信息,如“?wxDefaultPosition@@3VwxPoint@@B”更多。带空格的版本解释了符号对应的 C++ 源代码,在这种情况下,class wxPointconst 对象称为 wxDefaultPosition。这都是正常和正确的,而不是工具链问题的迹象。
【解决方案4】:

尝试从从站点下载的预编译二进制文件进行构建时,在 MSVC 2019 上遇到了与问题中所述相同的问题。 当我使用“Release”选项(不是“Release DLL”,而是“Release”)从...\build\msw\wx_vc12.sln 的源代码编译并获取“vc_x64_lib”文件夹时,一切正常。在我的情况下,不需要指定 #define __WXMSW__#define WXUSINGDLL,只需检查您是否使用 Multi-threaded DLL (/MD) 构建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多