wxWidgets Visual Studio 2015 链接错误
wxWidgets Visual Studio 2015 Link Errors
我正在尝试在Windows 10下使用Visual Studio Community 2015运行最小的wxWidgets示例。 wxWidgets版本是3.1.0。
我使用以下命令编译了wxWidgets:
nmake -f makefile.vc SHARED=1 UNICODE=1 MONOLITHIC=1 BUILD=release
wxWidgets的编译在上述命令下是成功的。
最小的wxWidgets示例编译良好,但我在发布版本中收到以下链接错误(尚未尝试调试(:
error LNK2001: unresolved external symbol "void (__cdecl* wxTheAssertHandler)(class wxString const &,int,class wxString const &,class wxString const &,class wxString const &)" (?wxTheAssertHandler@@3P6AXABVwxString@@H000@ZA)
1>Source.obj : error LNK2001: unresolved external symbol "class wxEventTypeTag<class wxCommandEvent> const wxEVT_MENU" (?wxEVT_MENU@@3V?$wxEventTypeTag@VwxCommandEvent@@@@B)
1>Source.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * (__cdecl* wxAppConsoleBase::ms_appInitFn)(void)" (?ms_appInitFn@wxAppConsoleBase@@1P6APAVwxAppConsole@@XZA)
1>Source.obj : error LNK2001: unresolved external symbol "char const * const wxFrameNameStr" (?wxFrameNameStr@@3QBDB)
1>Source.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * wxAppConsoleBase::ms_appInstance" (?ms_appInstance@wxAppConsoleBase@@1PAVwxAppConsole@@A)
1>Source.obj : error LNK2001: unresolved external symbol "class wxMBConv * wxConvLibcPtr" (?wxConvLibcPtr@@3PAVwxMBConv@@A)
1>Source.obj : error LNK2001: unresolved external symbol "char const * const wxLOG_COMPONENT" (?wxLOG_COMPONENT@@3PBDB)
1>Source.obj : error LNK2001: unresolved external symbol "public: static unsigned int const wxString::npos" (?npos@wxString@@2IB)
1>Source.obj : error LNK2001: unresolved external symbol "class wxSize const wxDefaultSize" (?wxDefaultSize@@3VwxSize@@B)
1>Source.obj : error LNK2001: unresolved external symbol "bool wxTrapInAssert" (?wxTrapInAssert@@3_NA)
1>Source.obj : error LNK2001: unresolved external symbol "wchar_t const * const wxEmptyString" (?wxEmptyString@@3PB_WB)
1>Source.obj : error LNK2001: unresolved external symbol "private: static bool wxLog::ms_doLog" (?ms_doLog@wxLog@@0_NA)
1>Source.obj : error LNK2001: unresolved external symbol "char const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QBDB)
1>Source.obj : error LNK2001: unresolved external symbol "private: static unsigned long wxThread::ms_idMainThread" (?ms_idMainThread@wxThread@@0KA)
1>Source.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
我有以下预处理器定义:WIN32;_UNICODE;__WXMSW__;UNICODE
整个链接器标志:/OUT:"C:Usersgbdocumentsvisual studio 2015ProjectswxWidgetsDenemeReleasewxWidgetsDeneme.exe" /MANIFEST /LTCG:incremental /NXCOMPAT /PDB:"C:Usersgbdocumentsvisual studio 2015ProjectswxWidgetsDenemeReleasewxWidgetsDeneme.pdb" /DYNAMICBASE "wxmsw31u.lib" "wxmsw31u_gl.lib" "wxexpat.lib" "wxjpeg.lib" "wxpng.lib" "wxscintilla.lib" "wxtiff.lib" "wxzlib.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MACHINE:X86 /OPT:REF /SAFESEH /INCREMENTAL:NO /PGD:"C:Usersgbdocumentsvisual studio 2015ProjectswxWidgetsDenemeReleasewxWidgetsDeneme.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"ReleasewxWidgetsDeneme.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:UsersgbDownloadswxWidgets-3.1.0libvc_dll" /TLBID:1
任何想法将不胜感激。
不会想到会这么简单:只是缺少一个预处理器定义:WXUSINGDLL
在文档中它提到:WXUSINGDLL:如果您使用 DLL 而不是静态构建进行编译,并且因为我使用的是 nmake -f makefile.vc SHARED=1 ...
.
我现在只是好奇:为什么wxWidgets使用gcc
运行没有任何问题,即使预处理器定义中缺少WXUSINGDLL
。
wxWidgets 发行版附带的文件docs/msw/install.txt
中进行了说明。
简而言之,有两种方法:
- a( 使用提供的项目文件从 IDE 中。
- b( 从命令行使用提供的生成文件
对于 b( 它只是 nmake/f makefile.vc,带有一些您想要的库类型的标志。例如,nmake /f makefile.vc BUILD=release SHARED=1
将生成多个可供应用使用的.dll
文件,并且它们不包含任何调试符号。
编译命令缺少 makefile.vc。在此文件中,是否定义某些标志(如 WXUSINGDLL(取决于您的命令标志。
编译应用程序时,必须使用与用于 wxWidgets 编译的标志相同的标志。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误