簡體   English   中英

使用GTK + 3.0編譯的C程序在運行時失敗並顯示警告

[英]C Program compiled with GTK+3.0 fails with warning when run

我已經閱讀了一些有關如何在C程序中將GTK +用於GUI的指南,並且偶然發現了本教程,以便在系統上獲取GTK +。 這是我逐行運行的所有內容:

chmod +x gtk-osx-build-setup.sh
./gtk-osx-build-setup.sh
cd ~/.local/bin
./jhbuild build python
./jhbuild bootstrap
./jhbuild build meta-gtk-osx-bootstrap
./jhbuild build meta-gtk-osx-core

在這一點上,我還沒有發現使用pkg-config tick hack來編譯帶有GTK頭文件的C程序,所以當我運行gcc main.c -o main我只是得到了main.c:1:10: fatal error: 'gtk/gtk.h' file not found ,但是我發現了另一個建議我執行此操作的教程 (Command-F“ jhbuild build gtk +”),所以我運行了:

./jhbuild build gtk+

在那之后,我終於找到了建議運行以下命令的其他資源,以檢查我的系統是否可以找到軟件包,因此當我運行pkg-config gtk+-3.0 --cflags我得到了:

-D_REENTRANT -I/opt/local/include/gtk-3.0 -I/opt/local/include/at-spi2-atk/2.0 -I/opt/local/include/at-spi-2.0 -I/opt/local/include/dbus-1.0 -I/opt/local/lib/dbus-1.0/include -I/opt/local/include/gtk-3.0 -I/opt/local/include/gio-unix-2.0/ -I/opt/local/include -I/opt/local/include/cairo -I/opt/local/include/pango-1.0 -I/opt/local/include/harfbuzz -I/opt/local/include/pango-1.0 -I/opt/local/include/atk-1.0 -I/opt/local/include/cairo -I/opt/local/include/pixman-1 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include/libpng16 -I/opt/local/include -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/libpng16 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include

當我運行pkg-config gtk+-3.0 --libs我得到:

-L/opt/local/lib -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpangoft2-1.0 -lpango-1.0 -lm -lfontconfig -lfreetype -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl

我的main.c包含本教程中的以下代碼:

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
    GtkWidget *window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title(GTK_WINDOW(window), "Window");

    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show(window);

    gtk_main();

    return 0;
}

當我運行gcc -Wall -Wextra -Werror `pkg-config gtk+-3.0 --cflags` main.c -o main `pkg-config gtk+-3.0 --libs`main創建時沒有警告或其他任何提示,但是當我運行./main收到此警告,程序立即結束:

(main:93199): Gtk-WARNING **: cannot open display:

我的計算機是運行OS X 10.9.5,配備2.9 GHz Intel Core i7處理器的2012年中的MacBook Pro(我真的不知道需要多少信息)。 我只想解決此警告,因此我可以顯示一個簡單的窗口而沒有任何問題。

更新:我注意到我安裝了gtk +而不是gtk + -3.0,所以我運行~/.local/bin/jhbuild build gtk+-3.0來安裝它。 當我運行~/.local/bin/jhbuild info gtk+-3.0 ,我得到:

Name: gtk+-3.0
Module Set: gtk-osx
Type: autogen
Install version: 3.14.5-b4ea7a7455981175cb26a7a1a49b765e
Install date: 2015-01-27 23:49:55
URL: http://ftp.gnome.org/pub/GNOME/sources/gtk+/3.14/gtk+-3.14.5.tar.xz
Version: 3.14.5
Tree-ID: 3.14.5-b4ea7a7455981175cb26a7a1a49b765e
Sourcedir: ~/gtk/source/gtk+-3.14.5
Requires: glib, pango, atk, gdk-pixbuf, gobject-introspection
Required by: meta-gtk-osx-gtk3, goocanvas2, gtkmm3
After: meta-gtk-osx-bootstrap
Before: gtk-mac-integration

但是,即使重新編譯了C程序,我仍然遇到相同的錯誤。

正如nm所建議的,我嘗試安裝XQuartz ,現在它可以完美運行。

需要X服務器在OSX上運行GTK程序絕對不是真的。 通過gtk-osx-build進行安裝時,它會使用Quartz后端,從而使其可以在OSX上本地運行。

但是,您的pkg-config輸出顯示您正在/opt/local安裝在/opt/local的GTK的其他副本。 gtk-osx-build的默認安裝位置是~/gtk/inst ,我認為您沒有更改。 該其他副本可能不是用Quartz后端構建的。

請記住,至少需要在jhbuild shell編譯並運行程序,直到將其捆綁到應用程序中為止。 否則,編譯器將在~/gtk/inst找不到可執行文件和庫。

我還建議您盡可能從/opt/local卸載GTK的另一個副本,以避免將來出現此類問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM