===================================================================================
关于我的系统:
1.ubuntu 11。10,是借助wubi直接在windows下安装的(这周内又卸载了重新安装了一遍,并且安装了所有的更新)。
2.桌面环境KDE。
3.配置了jdk,并使用eclipse写了java和c的hello的测试程序,均可以成功。
===================================================================================
我在百度上找到了一个安装安装gtk的方法,我也是按照这个方法安装的,方法如下:
代码: 全选
[i]apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具
apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置
apt-get install devhelp #这将安装 devhelp GTK文档查看程序
apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档
apt-get install glade libglade2-dev #这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库。
apt-get install libgtk2.0*[/i]
麻烦此刻正式开始了:
1.这么编译:gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`
#include <gtk/gtk.h>
但是提示没有gtk/gtk.h,no such directory or file。后来我发现/usr/include文件下有gtk-2.0和gtk-3.0两个文件夹,两个文件夹中都有各自的gtk与gdk文件夹(gtk-3.0中还有一个unix-print文件夹),后来我就把gtk-3.0中的三个文件夹复制到上一级目录(/usr/include),此时gtk.h文件缺失的错误没了。通过这种把文件夹复制到上一层目录,解决了所有的头文件缺失的问题。[color=#FF0000]我怀疑后来出现的问题是不是和这个有关。[/color]
2.一开始测试的是这段代码:
代码: 全选
//hello.c
#include <gtk-2.0/gtk/gtk.h>
//主窗口中按钮的回调函数
void on_button_clicked(GtkWidget* button, gpointer userdata)
{
GtkWidget *dialog;
//创建带确认按钮的对话框,父控件为空
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL |GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
(gchar*)userdata);
gtk_dialog_run(GTK_DIALOG(dialog));//显示并运行对话框
gtk_widget_destroy(dialog);//销毁对话框
}
//主函数
int main(int argc, char* argv[])
{
GtkWidget *window, *button;
//初始化GTK+程序
gtk_init(&argc, &argv);
//创建窗口,并为窗口的关闭信号加回调函数以便退出
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",
G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"Hello World!");
gtk_container_set_border_width(GTK_CONTAINER(window),10);
//创建按钮控件,为单击信号加回调函数,将其放入窗口中
button=gtk_button_new_with_label("Hello World!");
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_button_clicked),(gpointer)"你好!\n自由的世界。");
gtk_container_add(GTK_CONTAINER(window),button);
//下面函数显示窗口控件同时显示其中的所有其它控件
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
/usr/include/gtk/gtkinputdialog.h:74:14: error: field ‘GSEAL’ declared as a function
/usr/include/gtk/gtkinputdialog.h:64:14: error: duplicate member ‘GSEAL’
/usr/include/gtk/gtkinputdialog.h:65:14: error: duplicate member ‘GSEAL’
……
/usr/include/gtk/gtkinputdialog.h:74:14: error: duplicate member ‘GSEAL’
In file included from /usr/include/gtk-2.0/gtk/gtk.h:241:0,
from hello.c:2:
/usr/include/gtk/gtkpixmap.h:52:3: error: unknown type name ‘GdkPixmap’
/usr/include/gtk/gtkpixmap.h:53:3: error: unknown type name ‘GdkBitmap’
……
3。发现自己一下子解决不了这个问题,我就找了个更简单的代码,如下:
代码: 全选
#include <gtk/gtk.h>
int main(int argc, char* argv[])
{
GtkWidget *window;
//初始化GTK+程序
gtk_init(&argc, &argv);
//创建窗口,并为窗口的关闭信号加回调函数以便退出
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return FALSE;
}
/tmp/ccL3X6TK.o: In function `main':
test.c:(.text+0x17): undefined reference to `gtk_init'
test.c:(.text+0x23): undefined reference to `gtk_window_new'
test.c:(.text+0x33): undefined reference to `gtk_widget_show'
test.c:(.text+0x38): undefined reference to `gtk_main'
查阅帖子http://cart033.blog.163.com/blog/static ... 363427940/,
没觉得自己的命令错了:crazyegg@ubuntu:~/Desktop$ gcc `pkg-config -cflags -libs gtk-2.0` test.c -o test
是不是我在第一步中对文件夹的复制破坏了对库文件的寻找啊?
太糟糕了!大家有没有过类似的经历啊!^_^
谢谢大家留下自己的看法啊!