Mingw кросс-компиляция работает только в режиме отладки Linux -> Windows - PullRequest
0 голосов
/ 14 января 2019

Мое приложение c ++ создается на сервере debian с использованием набора инструментов для кросс-компиляции mingw-w64. Артефакт, созданный из этой сборки, прекрасно работает, когда присутствуют все зависимости msys2, но только отладочная сборка. Сборка релиза запускает процесс, некоторое время ждет и закрывает его, ничего не печатая и не запрашивая.

Сборка выполняется с использованием CMake, и мой раздел, посвященный кросс-компиляции, выглядит следующим образом:

if ("${CROSS_COMPILE}" STREQUAL "1")
    MESSAGE("Cross compile")
    SET(CMAKE_SYSTEM_NAME Windows)
    include(CMakeForceCompiler)
    IF ("${GNU_HOST}" STREQUAL "")
        SET(GNU_HOST i586-mingw32msvc)
    ENDIF ()
    SET(CMAKE_C_COMPILER ${GNU_HOST}-gcc)
    SET(CMAKE_CXX_COMPILER ${GNU_HOST}-g++)
    SET(CMAKE_RC_COMPILER ${GNU_HOST}-windres)
    SET(CMAKE_FIND_ROOT_PATH /usr/${GNU_HOST})
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    add_definitions(-DUSE_CROSS_COMPILE)
    add_definitions(-Bstatic)
ENDIF ()

И это называется так в режиме отладки / выпуска:

cmake -DGNU_HOST=x86_64-w64-mingw32 -DCROSS_COMPILE=1 ..
cmake -DGNU_HOST=x86_64-w64-mingw32 -DCROSS_COMPILE=1 -DCMAKE_BUILD_TYPE=Release ..

Конечно, я могу предоставить гораздо больше информации о моем CMakeLists.txt, но я не совсем уверен, какие части имеют смысл.

Я использую следующие библиотеки, которые присутствуют во время компиляции (скопировано из моей установки windows msys2):

  • OpenGL
  • GTK-3.0
  • GTK-SourceView-3,0
  • Темы (через find_package(Threads))

У кого-нибудь есть идея, почему режим отладки работает без проблем, в то время как режим выпуска не запускает мое приложение должным образом?

EDIT Следующая строка работает в режиме отладки, но не в режиме выпуска:

std::ifstream is("settings.conf", std::ios::in);

Выдает SIGSEGV в режиме выпуска, но работает в режиме отладки

...