c++ - Windows 10-使用gtkmm-3.0库和g++的段错误[包括复制]

标签 c++ windows segmentation-fault g++ gtkmm

语境

我不是非常喜欢向Stack垃圾邮件发送问题,但在过去的两天里,我一直在努力使它工作。开始...

我想出了一个基本C++文件的小幅复制,它的编译了,而在Linux(ubuntu)上完美地运行了,但是编译并导致了立即出现SegFault (或似乎经常发生的访问冲突) Windows 10上使用MSYS2(mingw64)g++编译器的gtkmm事件循环)。

对于MSYS2,我使用的是docs建议的mingw-w64-x86_64-gtk3包。我的想法是链接过程中有问题吗?没有出现GUI,只有终端错误。

导致问题的行特别是App::App : myLabel("HelloWorld") {

通过使用label = Gtk::Label("Hello world!");在构造函数中初始化列表,该程序实际上也可以在Windows 10上运行,尽管我后来发现了另一个小细节。

我是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");

关于c++ - Windows 10-使用gtkmm-3.0库和g++的段错误[包括复制],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60360990/

相关文章:

c++ - 与数学函数相比,条件指令的执行速度

C++ 在可变参数宏中使用多个参数(实现可选参数)

c++ - 应用程序无法在 Windows xp 上正确初始化

python - 如何使用 Python 访问命令提示符历史记录

c++ - 找不到 `pthread_setaffinity_np'?

c++ - 分配给全局范围内的函数指针

c++ - 如何将 C++ 变体转换为 JSON?

c - 递归函数,传递参数 - 段错误

c++ - 读取文件夹中的文件列表时获取分段 fold

c - 访问结构中的结构指针时出现段错误