Мое приложение 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 в режиме выпуска, но работает в режиме отладки