[英]Windows 10 - Segmentation fault using the gtkmm-3.0 library and g++ [reproduction included]
我不喜歡用問題向 StackOverflow 發送垃圾郵件,但過去兩天我一直在努力讓它發揮作用。 開始...
我想出了一個基本 C++ 文件的小復制品,該文件可以在 Linux (ubuntu) 上完美編譯和運行,但在 Windows 上編譯並導致立即出現 SegFault (或似乎發生在 gtkmm 事件循環中的持續訪問沖突) 10 使用 MSYS2 (mingw64) g++ 編譯器。
對於 MSYS2,我使用的是文檔推薦的mingw-w64-x86_64-gtk3
包。 我的想法是這是鏈接過程中的問題? 沒有 GUI 出現,只有終端錯誤。
導致問題的行特別是App::App : myLabel("HelloWorld") {
。
通過使用label = Gtk::Label("Hello world!");
在構造函數中初始化列表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");
反而。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.