#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. Или, согласно вашему комментарию, если он создает исполняемый файл WindowsCrawl_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.