Xwe*_*que 7 c c++ linux ubuntu g++
我对编程很陌生,特别是涉及如何包含库和类似的活动.我过去一直使用Python进行编程,并且我一直在使用GTK来创建窗口,这也是我在用c ++编程时打算做的事情.为了开始,这是我的代码:
#include <stdlib.h>
#include <gtk/gtk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
{
GtkWidget *dialog = NULL;
dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World!");
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
int main (int argc, char *argv[])
{
GtkWidget *button = NULL;
GtkWidget *win = NULL;
GtkWidget *vbox = NULL;
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
gtk_init (&argc, &argv);
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
/* Create the main window */
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW (win), 400, 300);
gtk_container_set_border_width (GTK_CONTAINER (win), 8);
gtk_window_set_title (GTK_WINDOW (win), "test");
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
gtk_widget_realize (win);
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
/* Create a vertical box with buttons */
vbox = gtk_vbox_new (TRUE, 6);
gtk_container_add (GTK_CONTAINER (win), vbox);
button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
g_signal_connect (button, "clicked", gtk_main_quit, NULL);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
/* Enter the main loop */
gtk_widget_show_all (win);
gtk_main ();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码取自我在互联网上发现的"Hello world"示例.
我知道这个问题已经得到了答案,但我的情况要复杂得多(至少从我的角度来看).首先,我已经安装了所有必需的包.顺便说一句,我运行Ubuntu 14.04.
当我使用我编译代码时,g++ main.cpp我得到以下错误:
main.cpp:2:21: fatal error: gtk/gtk.h: No such file or directory
#include <gtk/gtk.h>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
这个特殊错误有一个修复,就是像这样扩展编译命令:g++ main.cpp -I/usr/include/gtk-2.0.然而,这将提供另一个类似的错误:
In file included from /usr/include/gtk-2.0/gdk/gdk.h:32:0,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from main.cpp:2:
/usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30:21: fatal error: gio/gio.h: No such file or directory
#include <gio/gio.h>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
你可以通过这样的扩展命令(所有命令都在互联网上的基金,我不太了解这一切)解决这一问题,以及:g++ -g -Wall -c -o program.o main.cpp -I/usr/include/gtk-2.0 $(pkg-config --libs --cflags glib-2.0).现在会出现错误cairo.h.
如您所见,存在类似的错误.我不知道有什么不对,但我必须相信有一个相对容易的解决方案.
此外,我尝试了全新安装的Ubuntu(只需要安装的软件包),并发生相同的错误.
dou*_*eud 12
当包含某个包时,该pkgconfig命令为编译器提供了所有必需-I(包含)和-l(链接器)语句.
看看运行给出的内容:
pkgconfig --cflags --libs gtk+-2.0
Run Code Online (Sandbox Code Playgroud)
我已经尝试在我的Ubuntu 14.04.1上编译你的代码了,当我使用时,它很顺利:
g++ main.cpp `pkg-config --cflags --libs gtk+-2.0`
Run Code Online (Sandbox Code Playgroud)
可能pkg-config --libs --cflags glib-2.0还不足以提供所有必需的包含路径和共享库.
| 归档时间: |
|
| 查看次数: |
23618 次 |
| 最近记录: |