我正在开发Visual Studio 2017中针对wxWidgets 3.1.0的CMake项目。每当我尝试构建它时,我会收到大量类似于以下内容的错误消息:
unresolved external symbol "protected: virtual class wxRefCounter * __cdecl wxObject::CreateRefData(void)const " (?CreateRefData@wxObject@@MEBAPEAVwxRefCounter@@XZ)
以下是我的CMakeLists.txt文件的内容:
cmake_minimum_required(VERSION 3.8)
project (FNDice-cmake)
set(CMAKE_CXX_STANDARD 11)
set(wxWidgets_CONFIGURATION mswu)
set(wxWidgets_ROOT_DIR C:/wxWidgets-3.1.0)
find_package(wxWidgets REQUIRED all)
include(${wxWidgets_USE_FILE})
add_executable(FNDice-cmake WIN32 FNDiceApp.h FNDiceApp.cpp MainWindow.h MainWindow.cpp FNDie.h FNDie.cpp AboutDialog.h AboutDialog.cpp FNDice.rc fndice-small.ico wxIconBundleResLoader.h wxIconBundleResLoader.cpp sqlite3.c sqlite3.h LICENSE-2.0.h about24.h help24.h history24.h new24.h open24.h save24.h)
target_link_libraries(FNDice-cmake ${wxWidgets_LIBRARIES})
我确实找到了类似的问题(linker error using wxwidgets with cmake),但正如您所看到的,我已经在WIN32
行中使用了add_executable()
。
答案 0 :(得分:0)
我有同样的问题: wxWidgets网站似乎并未将CMake列为构建wxWidgets项目的方法,但CMake拥有针对wxWidgets的文档化findpackage方法,并遵循该软件包的说明:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project (wxHello)
#set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_EXTENSIONS OFF)
set(wxWidgets_CONFIGURATION mswu)
find_package(wxWidgets COMPONENTS core base REQUIRED)
if (NOT wxWidgets_FOUND)
message(SEND_ERROR "wxWidgets_FOUND => ${wxWidgets_FOUND}")
endif ()
include(${wxWidgets_USE_FILE})
message ( "wxWidgets_INCLUDE_DIRS => ${wxWidgets_INCLUDE_DIRS}")
set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT "${PROJECT_NAME}" )
# add_executable(test ${SOURCES})
add_executable(${PROJECT_NAME} app.cpp app.h frame.cpp frame.h stdafx.h)
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})
生成的Makefile和Visual Studio解决方案文件失败,并出现链接错误。
我可以从命令行手动构建程序,效果很好,但是使用wxWidgets的全部原因是可移植性,并且命令行构建不可移植。
CL.exe /c /ZI /I%VCINCLUDE% /I%WXWIN%\lib\vc_x64_lib\mswud /JMC /W3 /WX- /diagnostics:classic /sdl /Od /D _DEBUG /D _WINDOWS /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /permissive- /Zc:wchar_t /Zc:forScope /Zc:inline /std:c++17 /Gd /TP /FC /errorReport:prompt ..\*.cpp
link /LIBPATH:%WXWIN%\lib\vc_x64_lib *.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Comctl32.lib Rpcrt4.lib
在命令行中构建的程序可以正常运行,或者使用Visual Studio * .sln文件构建的程序也可以正常运行-仅Makefile和CMake构建的sln文件失败。