
[英]Google Test: error LNK2019: unresolved external symbol with Visual Studio 2017 with CMake
[英]Unresolved external symbol error when using CMake in Visual Studio 2017 to build a wxWidgets project
我正在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})
我确实找到了类似的问题( 使用带有cmake的wxwidgets的链接器错误 ),但是如您所见,我已经在我的add_executable()
行中使用WIN32
。
我遇到了同样的问题: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文件一起构建可以正常工作-仅CMake生成的Makefile和sln文件会失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.