[英]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.