vld 引发异常
注意dbghelp.dll
不应该使用系统的:C:\Windows\SYSTEM32\dbghelp.dll
set(dbghelp "dbghelp") set(dbghelp_dll ${CMAKE_CURRENT_LIST_DIR}/../setup/dbghelp/x86/dbghelp.dll) add_library(${dbghelp} SHARED IMPORTED GLOBAL) set_target_properties(${dbghelp} PROPERTIES IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/../lib/dbghelp/lib/Win32/DbgHelp.Lib IMPORTED_LOCATION ${dbghelp_dll} ) add_custom_command(TARGET ${vld} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${dbghelp_dll} $(outdir) )
但是我正确设置了dbghelp.dll之后仍旧报错,后来感觉是vld.dll的问题,看了下代码,的确对vld.dll的名字有严格的限制:
#pragma comment(lib, "vld.lib") #ifndef WIN64 #define VLDDLL "vld_x86.dll" #else #define VLDDLL "vld_x64.dll" #endif
追加后缀后,就不再报错了,也能正常使用
set_target_properties(${vld} PROPERTIES SUFFIX "_x86.dll" )
vs版本
vld对vs的版本有要求,不能高于2015,cmake可以为target设置具体的platform toolset
bash
set_target_properties(${vld} PROPERTIES VS_PLATFORM_TOOLSET "v140" )
下面是一些常见的 VS_PLATFORM_TOOLSET
值:
v110
: Visual Studio 2012v120
: Visual Studio 2013v140
: Visual Studio 2015v141
: Visual Studio 2017v142
: Visual Studio 2019
DbgHelp大量的错误
我将代码进行了内聚,重新使用cmake编译,发现竟然报错,最后发现不显示的引用dbghelp竟然也能正常运行
target_link_libraries(${vld} PUBLIC ${cppformat} psapi # ${dbghelp} )
移植经验
集成到cocos2dx中,因为一些全局的cmake命令,导致vld的target也受到了污染里面会添加非常多不必要的目录和预处理器,可能这些污染源就会导致编译无法通过,最主要的
add_definitions include_directories
统一使用target相关的命令替换,并对项目的target进行了额外的适配,保证了项目可以正常运行起来。