CMAKE кросскомпиляция с Arch Linux на Windows 10

Всем привет! Я написал игру на SFML(задание в университете) и мне нужно ее запустить на Windows, но дело в том что игру я писал на Arch Linux, и мне нужно сделать кроссплатформенную компляцию моего проекта.

Моя цель - скомпилировать .exe файл для запуска на виндовс в Arch Linux, вот как я попытался это сделать, но я получаю ошибку

/usr/lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld: /usr/lib/libsfml-graphics.so.2.6.1: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/cyber_pet_project.dir/build.make:164: cyber_pet_project] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/cyber_pet_project.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
cmake_minimum_required(VERSION 3.26)
project(cyber_pet_project)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)

find_package(SFML 2.5 COMPONENTS graphics window system REQUIRED)

include_directories(
        ${SFML_INCLUDE_DIRS}
        /usr/x86_64-w64-mingw32/include/SFML
        /usr/x86_64-w64-mingw32/include/rapidjson
)

set(SOURCES
        src/main.cpp
        src/source/Player.cpp
        src/source/Game.cpp
        src/source/JSON_API.cpp
        src/source/Button.cpp
)

add_executable(cyber_pet_project WIN32 ${SOURCES})

target_link_libraries(cyber_pet_project PRIVATE sfml-graphics sfml-window sfml-system)

Так же я пытался установить GCC 7.3.0 MinGW (SEH) - 64-bit напрямую в папку с проектом и указать к нему путь, но ничего не получилось

cmake_minimum_required(VERSION 3.26)
project(cyber_pet_project)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)

find_package(SFML 2.5 COMPONENTS graphics window system REQUIRED)

include_directories(
        ${SFML_INCLUDE_DIRS}
        /home/kostiantyn/Documents/education/C/cyber-pet-project/SFML-2.5.1-windows-gcc-7.3.0-mingw-64-bit/SFML-2.5.1/include/SFML
        /usr/x86_64-w64-mingw32/include/rapidjson
)

set(SOURCES
        src/main.cpp
        src/source/Player.cpp
        src/source/Game.cpp
        src/source/JSON_API.cpp
        src/source/Button.cpp
)

add_executable(cyber_pet_project WIN32 ${SOURCES})

target_link_libraries(cyber_pet_project PRIVATE sfml-graphics sfml-window sfml-system)

Ответы (1 шт):

Автор решения: Виктор Петровичев

я решил вопрос по этому тикету https://stackoverflow.com/questions/62125123/sfml-cross-compilation-for-windows-on-linux

тоже арч манджаро. тоже под винду. что делал.

  1. скачал отсюда https://www.sfml-dev.org/files/SFML-2.6.1-windows-gcc-13.1.0-mingw-64-bit.zip архив

  2. подсунул его тулчейну из тикета выше.

  3. делал все как в том тикете , поправив пути по своему. все успешно сработало.

  4. вот мой CMakeLists.txt

    cmake_minimum_required(VERSION 3.16) message("starting cmake compiling apples") #set(CMAKE_CXX_STANDARD C17) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") #создаём новый проект project(applegame_win)

    find_package(SFML COMPONENTS graphics audio window system) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

    include_directories("/home/petroew/source/applegame/src/")

    add_executable(applegame_win /home/petroew/source/applegame/src/main.cpp /home/petroew/source/applegame/src/Apple.cpp /home/petroew/source/applegame/src/Game.cpp /home/petroew/source/applegame/src/Math.cpp /home/petroew/source/applegame/src/Player.cpp /home/petroew/source/applegame/src/Rock.cpp /home/petroew/source/applegame/src/UI.h /home/petroew/source/applegame/src/UI.cpp )

    find_package(SFML 2.6 COMPONENTS graphics audio network REQUIRED)

    target_link_libraries (applegame_win sfml-system sfml-graphics sfml-audio sfml-network)

→ Ссылка