当我将程序与 SDL2 链接时出现以下错误
/usr/bin/ld: ../_deps/sdl2_content-build/libSDL2d.a(SDL_stdlib.c.o): in function `SDL_floor_REAL':
/home/user/myprogram/cmake-build-debug/_deps/sdl2_content-src/src/stdlib/SDL_stdlib.c:247: undefined reference to `floor'
我制作了一个包含的 FetchSDL2.cmake 文件,理论上应该得到它并构建和使用它:
FetchContent_Declare(
sdl2_content
URL https://www.libsdl.org/release/SDL2-2.0.12.tar.gz
URL_HASH MD5=783b6f2df8ff02b19bb5ce492b99c8ff
)
FetchContent_GetProperties(sdl2_content)
if(NOT sdl2_content_POPULATED)
FetchContent_Populate(sdl2_content)
if(ANDROID)
set(SDL_SHARED ON CACHE BOOL "shared")
set(SDL_STATIC ON CACHE BOOL "static")
add_subdirectory(${sdl2_content_SOURCE_DIR} ${sdl2_content_BINARY_DIR} EXCLUDE_FROM_ALL)
add_library(SDL2::SDL2 ALIAS SDL2)
add_library(SDL2::SDL2main ALIAS SDL2main)
elseif(WIN32 OR LINUX OR MACOS)
set(SDL_SHARED OFF CACHE BOOL "no shared")
set(SDL_STATIC ON CACHE BOOL "static")
set(SDL_STATIC_PIC ON CACHE BOOL "Static version of the library should be built with Position Independent Code")
set(SDL_SHARED OFF)
set(SDL_STATIC ON)
set(SDL_STATIC_PIC ON)
set(FORCE_STATIC_VCRT ON CACHE BOOL "static windows static vcrc")
add_subdirectory(${sdl2_content_SOURCE_DIR} ${sdl2_content_BINARY_DIR} EXCLUDE_FROM_ALL)
add_library(SDL2::SDL2 ALIAS SDL2-static)
add_library(SDL2::SDL2main ALIAS SDL2main)
endif()
if(NOT EXISTS "${sdl2_content_BINARY_DIR}/include/SDL2")
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${sdl2_content_SOURCE_DIR}/include ${sdl2_content_BINARY_DIR}/include/SDL2)
endif()
find_package(LibM)
set(SDL2_INCLUDE_HINTS "${sdl2_content_BINARY_DIR}/include/" "${sdl2_content_BINARY_DIR}/include/SDL2/")
set(SDL2_LIB_HINTS "${sdl2_content_BINARY_DIR}/")
find_package(SDL2)
list(APPEND SDL2_INCLUDE_DIRS "${sdl2_content_BINARY_DIR}/include/SDL2/")
list(APPEND SDL2_INCLUDE_DIRS "${sdl2_content_BINARY_DIR}/include/")
list(APPEND SDL2_INCLUDE_DIRS "${LIBM_INCLUDE_DIRS}")
list(APPEND SDL2_LIBRARY_DIRS "${sdl2_content_BINARY_DIR}/")
list(APPEND SDL2_LIBRARIES SDL2::SDL2)
list(APPEND SDL2_LIBRARIES "${LIBM_LIBRARIES}")
endif()
但我不断收到上面的错误。我确实有 LibM,并且所有其他数学函数都正确链接。我在 Ubuntu 20.04 上。
你能帮忙解决这个问题,让它正确获取 SDL2 吗?我不安装它的原因是这个脚本将被 CMake 在一些没有包管理器的平台上使用。