Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障



上下文

我不太喜欢向StackOverflow发送问题,但在过去的两天里,我一直在努力让它发挥作用。给。。。

我提出了一个基本C++文件的小复制,编译并且在Linux(ubuntu(上完美运行,但在Windows 10上使用MSYS2(mingw64(g++编译器编译并导致立即SegFault(或似乎发生在gtkmm事件循环上的持续访问违规(。

对于MSYS2,我使用的是文档推荐的mingw-w64-x86_64-gtk3包。我的想法是,这是链接过程中的一个问题吗?没有GUI显示,只有终端错误。

导致问题的行具体为App::App : myLabel("HelloWorld") {

通过使用label = Gtk::Label("Hello world!");初始化构造函数内的列表该程序实际上也在Windows10上运行,尽管我后来在另一个小细节中发现了另一个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`

分段故障的示例:

#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行堆叠帧的漂亮文件。

我很感激你花时间阅读这篇文章。祝你今天过得愉快!

查找https://developer.gnome.org/gtkmm/stable/classGtk_1_1Label.html在我看来,他们的构造函数不提供char* const参数。请改用myLabel.set_text("HelloWorld");

最新更新