Перекрестная компиляция SDL2 из linux в Windows не создает exe-файл

#c #linux #windows #cmake #sdl-2

Вопрос:

Я использую WSL под управлением Ubuntu и пытаюсь получить программу SDL2 для компиляции с использованием Ubuntu, а затем запустить программу в Windows. Мне удалось заставить его построить, однако он не создает exe (и изменение расширения файла на exe не исправляет это). Кроме того, даже несмотря на то, что я установил CMAKE_CXX_FLAGS на-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")


 

РЕДАКТИРОВАТЬ: я был глуп, включив-о Crawl_The_Dungeon.exe как это теперь создает исполняемый файл. Однако в нем говорится, что я не могу запустить программу при ее открытии.

Комментарии:

1. Я был глуп, включив-о Crawl_The_Dungeon.exe как это теперь создает исполняемый файл. Однако в нем говорится, что я не могу запустить программу при ее открытии.

2. Что выводит file yourexecutable вывод на WSL? Я думаю, так оно и было бы file Crawl_The_Dungeon . Я подозреваю, что вы создаете исполняемый файл ELF. Или, согласно вашему комментарию, если он создает исполняемый файл Windows Crawl_The_Dungeon.exe , то что выводится при попытке запустить его из командной строки в Windows?

3. В WSL я получаю ошибку: XDG_RUNTIME_DIR не установлен в среде. При попытке запуска в CMD я не могу запустить или запустить из-за несовместимости с 64-разрядными версиями Windows

4. Теперь я получил его для создания exe-файла. Он просто не будет работать

5. Если у вас нет новой версии Windows 21H1, вы не сможете запустить ее в WSL (без X), но мне было любопытно file ... узнать, что, по мнению WSL, она создала. То, что исполняемый файл был создан с расширением, .exe не означает, что он является исполняемым файлом Windows. Если вы выполняете перекрестную компиляцию в WSL, то есть ли у вас также библиотеки SDL на стороне Windows? Вы компилируете с --static использованием статических библиотек SDL ( libsdl.a где-то должны быть), вам это тоже нужно на стороне Windows.