GTK3 на MSYS2 ошибка сегментации при запуске - PullRequest
1 голос
/ 30 апреля 2020

Я скомпилировал basi c GTK + пример , который просто создает окно. При компиляции исходного кода ошибок не возникает. Тоже работает нормально. Примечание: по какой-то причине он не использует ожидаемый внешний вид окна стиля гнома, а скорее "нормальный" Windows 10. Это может указывать на то, что некоторые зависимости отсутствуют. (Также gtk-demo-application имеет такой вид, но не gtk-demo или glade)

Я настроил среду MSYS2, как описано здесь https://www.gtk.org/docs/installations/windows/. Однако я сделал pacman -Syu и установил gtkmm3, cmake и ninja впоследствии.

При использовании gdb для отладки программы возникает ошибка сегментации.

Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007ffb7c50c3c8 in lstrcpyA () from C:\WINDOWS\System32\kernel32.dll
(gdb) bt
#0  0x00007ffb7c50c3c8 in lstrcpyA () from C:\WINDOWS\System32\kernel32.dll
#1  0x000000018000e023 in WINTAB32!UpdateTaskBar () from C:\WINDOWS\system32\WinTab32.dll
#2  0x00000001800103ca in WTOpenW () from C:\WINDOWS\system32\WinTab32.dll
#3  0x000000018001052c in WTOpenW () from C:\WINDOWS\system32\WinTab32.dll
#4  0x0000000180010665 in WTOpenW () from C:\WINDOWS\system32\WinTab32.dll
#5  0x000000006c1f9ace in libgdk-3-0!gdk_win32_pixbuf_to_hicon_libgtk_only () from C:\msys64\mingw64\bin\libgdk-3-0.dll
#6  0x0000000067f06c29 in libgobject-2.0-0!g_closure_invoke () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#7  0x0000000067f19ce9 in libgobject-2.0-0!g_signal_handler_disconnect () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#8  0x0000000067f243a7 in libgobject-2.0-0!g_signal_emit_valist () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#9  0x0000000067f24b78 in libgobject-2.0-0!g_signal_emit () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#10 0x0000000067f0ab93 in libgobject-2.0-0!g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#11 0x0000000067f0d04c in libgobject-2.0-0!g_object_notify () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#12 0x000000006c1cdf48 in libgdk-3-0!gdk_display_manager_open_display () from C:\msys64\mingw64\bin\libgdk-3-0.dll
#13 0x0000000067f06e66 in libgobject-2.0-0!g_closure_invoke () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#14 0x0000000067f24743 in libgobject-2.0-0!g_signal_emit_valist () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#15 0x0000000067f253b9 in libgobject-2.0-0!g_signal_emit_by_name () from C:\msys64\mingw64\bin\libgobject-2.0-0.dll
#16 0x000000006c1feaa9 in libgdk-3-0!gdk_win32_display_get_type () from C:\msys64\mingw64\bin\libgdk-3-0.dll
#17 0x000000006c1cdd88 in libgdk-3-0!gdk_display_manager_open_display () from C:\msys64\mingw64\bin\libgdk-3-0.dll
#18 0x000000006785b251 in libgtk-3-0!gtk_lock_button_set_permission () from C:\msys64\mingw64\bin\libgtk-3-0.dll
#19 0x000000006785bba5 in libgtk-3-0!gtk_init () from C:\msys64\mingw64\bin\libgtk-3-0.dll
#20 0x0000000063e4e81b in libgtkmm-3.0-1!_ZN3Gtk11ApplicationC1ERiRPPcRKN4Glib7ustringEN3Gio16ApplicationFlagsE () from C:\msys64\mingw64\bin\libgtkmm-3.0-1.dll
#21 0x0000000063e4e8c1 in libgtkmm-3.0-1!_ZN3Gtk11Application6createERiRPPcRKN4Glib7ustringEN3Gio16ApplicationFlagsE () from C:\msys64\mingw64\bin\libgtkmm-3.0-1.dll
#22 0x00000000004015bb in main (argc=1, argv=0x6cc3d0) at ../../../gtk-test/main.cc:6
(gdb)

Файл cmake:

cmake_minimum_required (VERSION 3.8)

set(gtk-test_sources 
    base.cc
)

# Use the package PkgConfig to detect GTK+ headers/library files
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtkmm-3.0)

# Setup CMake to use GTK+, tell the compiler where to look for headers
# and to the linker where to look for libraries
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})

# Add other flags to the compiler
add_definitions(${GTK3_CFLAGS_OTHER})

add_executable (gtk-test ${gtk-test_sources})
target_link_libraries(gtk-test ${GTK3_LIBRARIES})
...