我不是对问题进行垃圾邮件发送的忠实拥护者,但过去两天我一直在努力使此工作正常进行。来...
我想出了一个基本的C ++文件的小幅复制,该文件在Linux(ubuntu)上compiles和完美运行,但是编译并生成immediate SegFault(或常量)使用MSYS2(mingw64)g ++编译器在Windows 10上的gtkmm事件循环上似乎发生访问冲突。
对于MSYS2,我使用的是[doc0] docs推荐的软件包。我的想法是链接过程中有问题吗?没有GUI出现,只有终端错误。
导致问题的行特别是mingw-w64-x86_64-gtk3
。
通过在构造函数中初始化列表使用App::App : myLabel("HelloWorld") {
,该程序实际上也可以在Windows 10上运行,尽管我后来在另一个小细节上发现了另一个段错误。
我对C ++还是很陌生,我的问题是,我在代码中做错了什么吗?或者gtkmm库是否未针对Windows优化,或者二进制文件已过期?我想象对gtkmm源进行长时间编译会行得通吗?还是我只是在犯一个愚蠢的指针错误?
MSYS2设置:
label = Gtk::Label("Hello world!");
编译:
$ pacman -Syu gcc mingw-w64-x86_64-gtk3
segfaults的示例:
$ g++ -std=c++11 `pkg-config gtkmm-3.0 --cflags` -o app app.cpp `pkg-config gtkmm-3.0 --libs`
在Windows上运行上述代码的编译后的可执行文件会导致以下错误反复填充控制台:
#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(); };
我的主应用程序实际上是相同的,但是分成多个文件,并立即显示以下内容:
Exception code=0xc0000005 flags=0x0 at 0x0000000100401E9C. Access violation - attempting to read data at address 0x0000000021646CC2
并产生一个带有15行堆栈帧的漂亮文件。
我很感谢您花时间阅读这篇文章。祝你有美好的一天!
背景信息我不是非常喜欢向问题发送垃圾邮件,但是在过去的两天里,我一直在努力使其正常运行。到这里...我想出了一个基本的C ++的小复制品...
查找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
在我看来,他们的构造函数不提供https://developer.gnome.org/gtkmm/stable/classGtk_1_1Label.html参数。请改用char* const
。