配置和构建 wxWidgets 时链接器工具出错 Visual Studio 2017
Linker Tools Error while configured and build wxWidgets Visual Studio 2017
无法在 Visual Studio 2017 年配置 wxwidgets。
执行了这些步骤。
- 从 wxwidgets 网站下载源代码 'Windows 7Z' 文件,版本 3.1.3。
- 运行
build
->msw
Visual Studio 2017 年的 wx_vc15.sln
。
- 使用平台
x86
. 成功构建 Debub
、DLL Debug
、DLL Release
、Relese
在 Microsoft Visual Studio 17 V15.9.20
中创建了一个空项目。添加了一个 simple wxWidgets 程序。
在 project properties
中进行了以下更改
- 在 All Configurations
平台 Win32
中,将 Configuration Properties
-> Character Set
设置为 Use Unicode Character Set
C/C++
-> Additional Include Directories
-> $(WXWIN)\include\msvc;$(WXWIN)\include;
C/C++
-> Preprocessor
-> Preprocessor Defenitions
-> __WXMSW__;WXUSINGDLL;_DEBUG
Linker
-> Additional Library Directories
-> $(WXWIN)\lib\vc_dll
在 Environment Variables
中进行了这些更改
- 在
User variables
- 添加一个新变量
WXWIN
并将其值设置为 C:\Users\varun\Desktop\workspace\wxWidgets-3.1.3
。
- 路径 ->
C:\Users\varun\Desktop\workspace\wxWidgets-3.1.3\lib\vc_dll
.
在项目属性 Release
配置中,进行了这些更改
C/C++
-> Preprocessor
-> Preprocessor Defenitions
-> __WXMSW__;WXUSINGDLL;NDEBUG;
没有代码错误但是Linker Tools Error
Error (active) E1097 unknown attribute "no_init_all" WxWidgets_Application_5 C:\Program Files (x86)\Windows Kits\Include.0.18362.0\um\winnt.h
Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) WxWidgets_Application_3 C:\Users\varun\Desktop\workspace\visual_studio_projects_2017\WxWidgets_Application_3\WxWidgets_Application_3\MSVCRTD.lib(exe_main.obj)
Error LNK1120 1 unresolved externals WxWidgets_Application_3 C:\Users\varun\Desktop\workspace\visual_studio_projects_2017\WxWidgets_Application_3\Debug\WxWidgets_Application_3.exe
可能出了什么问题?
您显示的第一个错误根本不是错误,而只是一些 IntelliSense 噪音,请参阅此 bug report。真正的错误是无法找到 _main
这似乎表明您正在构建控制台应用程序(请参阅 Properties\Linker\System\SubSystem
选项),因此应该通过将其设为 Windows 应用程序。
此外,虽然我没有发现您的设置有任何问题,但我仍然建议您改用 official instructions。值得注意的是,在您的情况下,它应该像以下一样简单:
If you use MSVS 2010 or later IDE for building your project, simply add wxwidgets.props
property sheet to (all) your project(s) using wxWidgets. You don't need to do anything else.
无法在 Visual Studio 2017 年配置 wxwidgets。
执行了这些步骤。
- 从 wxwidgets 网站下载源代码 'Windows 7Z' 文件,版本 3.1.3。
- 运行
build
->msw
Visual Studio 2017 年的wx_vc15.sln
。 - 使用平台
x86
. 成功构建
Debub
、DLL Debug
、DLL Release
、Relese
在 Microsoft Visual Studio 17 V15.9.20
中创建了一个空项目。添加了一个 simple wxWidgets 程序。
在 project properties
中进行了以下更改
- 在 All Configurations
平台 Win32
中,将 Configuration Properties
-> Character Set
设置为 Use Unicode Character Set
C/C++
->Additional Include Directories
->$(WXWIN)\include\msvc;$(WXWIN)\include;
C/C++
->Preprocessor
->Preprocessor Defenitions
->__WXMSW__;WXUSINGDLL;_DEBUG
Linker
->Additional Library Directories
->$(WXWIN)\lib\vc_dll
在 Environment Variables
- 在
User variables
- 添加一个新变量
WXWIN
并将其值设置为C:\Users\varun\Desktop\workspace\wxWidgets-3.1.3
。 - 路径 ->
C:\Users\varun\Desktop\workspace\wxWidgets-3.1.3\lib\vc_dll
.
- 添加一个新变量
在项目属性 Release
配置中,进行了这些更改
C/C++
-> Preprocessor
-> Preprocessor Defenitions
-> __WXMSW__;WXUSINGDLL;NDEBUG;
没有代码错误但是Linker Tools Error
Error (active) E1097 unknown attribute "no_init_all" WxWidgets_Application_5 C:\Program Files (x86)\Windows Kits\Include.0.18362.0\um\winnt.h
Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) WxWidgets_Application_3 C:\Users\varun\Desktop\workspace\visual_studio_projects_2017\WxWidgets_Application_3\WxWidgets_Application_3\MSVCRTD.lib(exe_main.obj)
Error LNK1120 1 unresolved externals WxWidgets_Application_3 C:\Users\varun\Desktop\workspace\visual_studio_projects_2017\WxWidgets_Application_3\Debug\WxWidgets_Application_3.exe
可能出了什么问题?
您显示的第一个错误根本不是错误,而只是一些 IntelliSense 噪音,请参阅此 bug report。真正的错误是无法找到 _main
这似乎表明您正在构建控制台应用程序(请参阅 Properties\Linker\System\SubSystem
选项),因此应该通过将其设为 Windows 应用程序。
此外,虽然我没有发现您的设置有任何问题,但我仍然建议您改用 official instructions。值得注意的是,在您的情况下,它应该像以下一样简单:
If you use MSVS 2010 or later IDE for building your project, simply add
wxwidgets.props
property sheet to (all) your project(s) using wxWidgets. You don't need to do anything else.