我一直在尝试在 WSL (Ubuntu) 上设置 SDL2 并使用 cmake 和 mingw 交叉编译到 Windows。我遇到了这个问题,它无法尝试编译库文件本身:
In file included from /usr/include/SDL2/SDL_stdinc.h:31,
from /usr/include/SDL2/SDL_main.h:25,
from /usr/include/SDL2/SDL.h:32,
from /mnt/c/users/user/repos/project/final.cpp:5:
/usr/include/SDL2/SDL_config.h:4:10: fatal error: SDL2/_real_SDL_config.h: No such file or directory
4 | #include <SDL2/_real_SDL_config.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
这是我的CmakeLists.txt
cmake_minimum_required(VERSION 3.12.4) # CMake version check
project(name)
set(CMAKE_CXX_STANDARD 14) # Enable c++14 standard
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${name_SOURCE_DIR}/CMakePath")
SET(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_NAME Windows)
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)t
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(SOURCE_FILES final.cpp Soldier.cpp TilesEnum.cpp)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --static -std=c++0x -o test")
#add_executable(${PROJECT_NAME} src/test.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
include_directories(${SDL2_INCLUDE_DIR}
${SDL2_IMAGE_INCLUDE_DIR}
${SDL2_TTF_INCLUDE_DIR})
target_link_libraries(name ${SDL2_LIBRARY}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES})
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc")
到目前为止,我的运行理论是我安装了错误的库,但这并不能解释为什么它根本无法编译。我很失落。我找不到任何与此特定问题相关的内容,如果有,请将我链接到类似的内容。
这个CMake文件有很多问题,有很多重复的代码。 Tsyvarev 的评论对解决这个问题很有帮助。
fatal error: SDL2/_real_SDL_config.h
这意味着你的系统上没有安装SDL2库,那么你无法编译
只需安装 32 位版本的 SDL2 lib:
sudo apt install libsdl2-dev:i386
请勿在 Ubuntu 系统上运行
sudo apt install libsdl2-dev:i386
,以防止损坏 ubuntu-desktop