提问人:Neri-kun 提问时间:10/8/2019 最后编辑:Neri-kun 更新时间:3/5/2020 访问量:2519
无法在 VS 2019 上为 SDL 库的发布模式构建解决方案
Can't build solution in release mode for SDL library on VS 2019
问:
我尝试从这个特定的链接下载 SDL 库 https://www.youtube.com/watch?v=PTQkCRxr6lk&t=194s .然而,我偶然发现了一个“致命错误”,我不知道该怎么做才能解决它。
这是我收到的错误:
1>------ Build started: Project: SDL2, Configuration: Release x64 ------
2>------ Skipped Build: Project: uninstall, Configuration: Release x64 ------
2>Project not selected to build for this solution configuration
1> Creating library D:/Media/Downloads/SDL2-2.0.10/Build/Release/SDL2.lib and object D:/Media/Downloads/SDL2-2.0.10/Build/Release/SDL2.exp
1>SDL_string.obj : error LNK2019: unresolved external symbol memset referenced in function SDL_vsnprintf_REAL
1>D:\Media\Downloads\SDL2-2.0.10\Build\Release\SDL2.dll : fatal error LNK1120: 1 unresolved externals
1>Done building project "SDL2.vcxproj" -- FAILED.
3>------ Skipped Build: Project: INSTALL, Configuration: Release x64 ------
3>Project not selected to build for this solution configuration
========== Build: 0 succeeded, 1 failed, 4 up-to-date, 2 skipped ==========
答:
9赞
Michael Chen
10/17/2019
#1
@Neri-kun,我在VS2019上构建SDL2时遇到了完全相同的问题。似乎在 中,其中不包括在 中。因此,在中找到以下部分并添加到 .已解决的问题:memset
vcruntime.dll
CMakeLists.txt
CMakeLists.txt
vcruntime
EXTRA_LIBS
# Libraries for Win32 native and MinGW
- list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 shell32)
+ list(APPEND EXTRA_LIBS vcruntime user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 shell32)
评论
0赞
Neri-kun
10/28/2019
以下部分是什么意思?关于,这是我发现的所有内容: PS:很抱歉在 10 天后回复,我只是推迟了我的项目。CMakeLists.txt
cmake_minimum_required(VERSION ${CMAKE_VERSION}) project(IntelFortranImplicit Fortran) add_custom_command( OUTPUT output.cmake COMMAND ${CMAKE_COMMAND} -P ${IntelFortranImplicit_SOURCE_DIR}/detect.cmake ) add_library(FortranLib hello.f output.cmake)
1赞
JPNotADragon
12/29/2019
根据当前版本 2.0.10,还有一个额外的特定于 Windows 的库要包含,因此该行变为:setupapi
list(APPEND EXTRA_LIBS vcruntime user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
0赞
edin-m
8/27/2020
SDL 2.0.12 仍然存在此问题。将 vcruntime 添加到列表中可以使其工作。
0赞
Brian Whitman
3/5/2020
#2
这实际上是一个编译器优化问题。某些东西不恰当地内联了对 memset 的调用。如果检查 SDL_string.c 文件,您会发现 HAVE_MEMSET 未定义,因此没有调用 memset。VisualC 文件夹中提供的解决方案文件可以正确构建发布配置。如果检查 cmake 生成的解决方案与 VisualC 文件夹中的解决方案之间的差异,您应该会发现 cmake 生成的版本内联了任何合适的函数,而 VisualC 文件夹中的版本仅内联了标记__inline函数 (/Ob1)。
评论
Ctrl+K
{}