C++ 将SDL2从linux交叉编译到Windows';Don’我不能做一个exe

C++ 将SDL2从linux交叉编译到Windows';Don’我不能做一个exe,c++,linux,windows,cmake,sdl-2,C++,Linux,Windows,Cmake,Sdl 2,我正在使用一个运行Ubuntu的WSL,并试图用Ubuntu编译一个SDL2程序,然后在Windows上运行该程序。我已经能够让它生成,但是它不能生成exe(并且将文件扩展名更改为exe并不能修复它)。此外,即使我将CMAKE_CXX_标志设置为-o Crawl_the_Dungeon.exe,该文件的名称仍然是小写的,就像项目名称一样。当我还有一台linux机器的时候,我就能够在linux上编译和运行它 我对CMake还是一个新手,所以我不完全理解我是否和他很亲近 SET(CMAKE_SYST

我正在使用一个运行Ubuntu的WSL,并试图用Ubuntu编译一个SDL2程序,然后在Windows上运行该程序。我已经能够让它生成,但是它不能生成exe(并且将文件扩展名更改为exe并不能修复它)。此外,即使我将CMAKE_CXX_标志设置为-o Crawl_the_Dungeon.exe,该文件的名称仍然是小写的,就像项目名称一样。当我还有一台linux机器的时候,我就能够在linux上编译和运行它

我对CMake还是一个新手,所以我不完全理解我是否和他很亲近

SET(CMAKE_SYSTEM_NAME Windows)

set(CMAKE_CXX_STANDARD 14)            # Enable c++14 standard
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${crawl_the_dungeon_SOURCE_DIR}/CMakePath")

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)
project(crawl_the_dungeon)
set(SOURCE_FILES final.cpp Soldier.cpp TilesEnum.cpp)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --static -std=c++0x")

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(crawl_the_dungeon ${SDL2_LIBRARY}
                             ${SDL2_IMAGE_LIBRARIES}
                             ${SDL2_TTF_LIBRARIES}
                             )

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc")



编辑:我很傻,竟然在Dungeon.exe中加入了-o Crawl\u,因为它现在创建了一个exe。但是,它说我在打开程序时无法运行该程序。

我很愚蠢,因为它现在创建了一个exe,所以我没有把-o Crawl\u包含在\u Dungeon.exe中。但是它说我在打开程序时无法运行它。
文件的输出在WSL上的可执行文件的输出是什么?我猜那将是
文件抓取\u地下城
。我怀疑您正在创建ELF可执行文件。或者,根据您的评论,如果它正在生成windows exe
Crawl\u theu Dungeon.exe
,那么当您尝试在windows中的命令提示符下运行它时,会输出什么?在WSL中,我得到错误:XDG\u RUNTIME\u DIR未在环境中设置。尝试在CMD中运行时,由于与64位版本的Windows不兼容,我无法启动或运行get。我已让它立即创建exe。除非你有新版本的Windows21H1,否则它不会运行,你将无法在WSL(no X)中运行它,但我对
文件…
的输出很好奇,想看看WSL认为它创建了什么。仅仅因为可执行文件是使用扩展名
.exe
创建的,并不意味着它是windows可执行文件。如果您在WSL中进行交叉编译,那么windows端是否也有SDL库?使用
--static
编译要使用静态SDL库(应该是
libsdl.a
的某个地方),在windows端也需要它。