Контекст
Я не большой поклонник спама в StackOverflow с вопросами, но я пытался заставить это работать в течение последних двух дней. Вот так ...
Я придумала небольшую копию файла basi c C ++, который компилирует и отлично работает на Linux ( ubuntu), но компилируется и приводит к немедленному SegFault (или постоянному нарушению доступа, которое, по-видимому, происходит при событии gtkmm l oop) в Windows 10, с использованием компилятора g ++ MSYS2 (mingw64).
Для MSYS2 я использую пакет mingw-w64-x86_64-gtk3
, рекомендованный документами. Я думаю, что это проблема в процессе связывания? Не появляется GUI, появляются только ошибки терминала.
Строка, вызывающая проблему , конкретно App::App : myLabel("HelloWorld") {
.
Инициализируя список внутри конструктора. с использованием label = Gtk::Label("Hello world!");
, программа на самом деле работает также на Windows 10, хотя позже я обнаружил еще один segfault в другой маленькой детали.
Я довольно новичок в C ++ , мой вопрос, я делаю что-то очень неправильно в моем коде или возможно, что библиотека gtkmm просто не оптимизирована для Windows, или что двоичные файлы устарели? Я полагаю, что выполнение длительной компиляции источника gtkmm будет работать? Или я просто делаю глупую ошибку указателя?
Воспроизведение
Настройка MSYS2:
$ pacman -Syu gcc mingw-w64-x86_64-gtk3
Скомпилировано с:
$ g++ -std=c++11 `pkg-config gtkmm-3.0 --cflags` -o app app.cpp `pkg-config gtkmm-3.0 --libs`
Образец, который segfaults:
#include <gtkmm/window.h>
#include <gtkmm/label.h>
#include <string>
// Class prototype
class Window : public Gtk::Window {
public:
Window();
Gtk::Label myLabel;
};
// Entry point, create app and initialise window
int main(int argc, char* argv[]) {
auto app(Gtk::Application::create(argc, argv, "ch.epfl.cemes.marcus.test"));
Window window;
return app->run(window);
};
// Extend Gtk::Window and show some text
Window::Window() : myLabel("Hello world!") { // this line seems to be the problem
add(myLabel);
myLabel.show();
};
Запуск скомпилированного исполняемого кода из вышеприведенного кода на Windows приводит к следующей ошибке повторного заполнения консоли:
Exception code=0xc0000005 flags=0x0 at 0x0000000100401E9C. Access violation - attempting to read data at address 0x0000000021646CC2
Моё основное приложение, которое практически идентичный, но разбитый на несколько файлов, немедленно завершает работу со следующим:
Exception code=0xc0000005 flags=0x0 at 0x0000000063F14B9D. Access violation - attempting to read data at address 0xFFFFFFFFFFFFFFFF
0 [main] archipelago 1909 cygwin_exception::open_stackdumpfile: Dumping stack trace to archipelago.exe.stackdump
и выдает прекрасный файл с 15 строками кадров стека.
Я ценю время, которое вы потратили на чтение этого поста , Хорошего дня!