• ubuntu 搭建GTK+以及glade2集成开发环境的一些方法


    平台:UBUNTU

    2.3 GTK+开发环境

    2.3.1 PC机编译环境的搭建                                     
    1
    、安装gcc

    $ sudo apt-get install build-essential

    安装完毕后写个helloworld程序就可以验证是否安装成功         

    2
    、安装GTK环境

    GTK环境只要安装一个gnome-core-devel就可以了,里面集成了很多其他的包。除此之外还要转一些其他的东西,如 libglib2.0 -doclibgtk2.0-doc帮助文档,devhelp帮助文档查看,glade-gnomeglade-commonglade-doc 形界面设计等。

    $ sudo apt-get install libgtk2.0-dev

    $ sudo apt-get install gnome-core-devel
    $ sudo apt-get install libglib2.0-doc libgtk2.0-doc
    $ sudo apt-get install devhelp
    $ sudo apt-get install glade-gnome glade-common glade-doc



    3
    、测试程序

    #include <gtk/gtk.h>
    void hello(GtkWidget *widget,gpointer data)
    {
    g_print("Hello Ubuntu!\n");
    } 54ne.com
    gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
    {
    g_print ("delete event occurred\n");
    return(TRUE);
    }
    void destroy(GtkWidget *widget,gpointer data)
    {
    gtk_main_quit();
    }
    int main( int argc, char *argv[] )
    {
    GtkWidget *window;
    GtkWidget *button;
    gtk_init (&argc, &argv);
    window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);
    gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL);
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label ("Hello Ubuntu!");
    gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL);
    gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (window));
    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_widget_show (button);
    gtk_widget_show (window);
    gtk_main();
    return(0);

    }


    用下面命令编译运行
    $ gcc gtkhello.c -o gtktest `pkg-config --cflags --libs gtk+-2.0`
    $ ./gtktest
    会显示一个带有一个按钮的窗口,点击按钮以后窗口关闭,命令行显示Hello Ubuntu

    2.3.2 MIPS
    交叉编译环境的搭建
    1
    、安装交叉编译器
    根据厂家提供的安装说明,把工具链放到/opt,设置环境变量

    $ export PATH=/opt/mipsel/bin:$PATH
    $ export PKG_CONFIG_PATH=/opt/mipsel/mipsel-linux/lib/pkgconfig


    $ mipsel-linux-gcc test.c –o test
    编译通过并且能在MIPS平台上运行,说明编译器路径设置成功
    使用file命令可查看二进制可执行文件的信息(包括内核版本号,处理器信息)

    $ file test

    MIPS平台可执行文件信息


    ELF 32-bit LSB executable, MIPS, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped


    对比之下,
    Intel
    平台可执行文件信息

    ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), not stripped


    2
    、编译能在开发板上运行的gtk+程序
    测试程序

    #include <gtk/gtk.h>
    void hello(GtkWidget *widget,gpointer data)
    {
    g_print("Hello Ubuntu!\n");
    }
    gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
    {
    g_print ("delete event occurred\n");
    return(TRUE);
    }
    void destroy(GtkWidget *widget,gpointer data)
    {
    gtk_main_quit();
    }
    int main( int argc, char *argv[] )
    {
    GtkWidget *window;
    GtkWidget *button;
    gtk_init (&argc, &argv);
    window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);
    gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL);
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label ("Hello Ubuntu!");
    gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL);
    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (window));
    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_widget_show (button);
    gtk_widget_show (window);
    gtk_main();
    return(0);

    }


    $ mipsel-linux-gcc gtktest.c –o gtktest `pkg-config --cflags --libs gtk+-2.0`

    编译成功后放到开发板上运行的时候提示无法display,估计是因为开发板上原来就已经有显示界面GPE的缘故,修改/etc/init.d/rcS后,成功运行。但是窗口的没有边框,重新开启GPE的时候就有边框了,可能是窗口管理器的问题。

    虽然运行成功了,但是通过命令
              $ pkg-config –cflags –libs gtk+-2.0
    出现的路径信息

    -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0


    就可以发现此时链接的库是本地计算机的库,而不是厂家提供的适合运行在开发板上的库。

    使用命令

    $ export PKG_CONFIG_PATH=/opt/mipsel/mipsel-linux/lib/pkgconfig
    $ pkg-config –cflags –libs gtk+-2.0


    出现路径信息

    -DPNG_NO_MMX_CODE -I/opt/mipsel/mipsel-linux/include/gtk-2.0 -I/opt/mipsel/mipsel-linux/lib/gtk-2.0/include -I/opt/mipsel/mipsel-linux/include/atk-1.0 -I/opt/mipsel/mipsel-linux/include/cairo -I/opt/mipsel/mipsel-linux/include/pango-1.0 -I/opt/mipsel/mipsel-linux/include/glib-2.0 -I/opt/mipsel/mipsel-linux/lib/glib-2.0/include -I/opt/mipsel/mipsel-linux/include/freetype2 -I/opt/mipsel/mipsel-linux/include -I/opt/mipsel/mipsel-linux/include/libpng12 -L/opt/mipsel/mipsel-linux/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0


    这时候链接的库才是厂家所提供的库
    虽然使用本地计算机的库也可以编译并在开发板上运行,然而使用厂家提供的库还是非常必要的。

    3
    、环境变量的生效
    $ sudo vim /root/.bashrc
       
    最后面添加

    $ export PATH=/opt/mipsel/bin:$PATH
    $ export PKG_CONFIG_PATH=/opt/mipsel/mipsel-linux/lib/pkgconfig


    重启之后生效

    2.3.3
    集成开发环境的建立
    集成开发环境使设计界面与其它部分代码完全分开,并且有可能做到在对界面进行改动后不必对应用进行编译。图形用户界面设计小组可不必关心应用程序的运行细 节, 同时编程人员也可以把他们的时间用于其它方面,而不需为界面的修改重复编写大量烦琐的gtk+函数。这种分工开发的形式符合软件工程的要求,对GUI软件 的开发也更方便。

    glade
    的优点
         1.
    Glade设计出界面元素,设置界面元素属性,为构件的信号设置回调函数;
       2.将其存为XML格式,观察并修改不符合要求的部分;
       3.编写应用其它部分代码,并在应用中载入Glade文件,编译C代码生成执行文件。

    安装glade2
    在应用程序-&gt;添加/删除里面搜索glade,把相关的项选上并下载
    此外还需要下载libgladelibglade依赖于libxmlgtk+

    有两种交叉编译方式

    自己写Makefile

    CC = mipsel-linux-gcc

    CFLAGS= -Wall -O3 -g

    GTK_CONFIG_CFLAGS= `pkg-config --cflags gtk+-2.0`

    GTK_CONFIG_LIBS= `pkg-config --libs gtk+-2.0`

    test: main.o support.o interface.o callbacks.o

    $(CC) main.o support.o interface.o callbacks.o -o initform $(GTK_CONFIG_LIBS)

    main.o: main.c support.h interface.h callbacks.h

    $(CC) $(CFLAGS) -c main.c -o main.o $(GTK_CONFIG_CFLAGS)

    support.o: support.c support.h

    $(CC) $(CFLAGS) -c support.c -o support.o $(GTK_CONFIG_CFLAGS)

    interfaceo: interface.c interface.h support.h callbacks.h

    $(CC) $(CFLAGS) -c interface.c -o interface.o $(GTK_CONFIG_CFLAGS)

    callbacks.o: callbacks.c callbacks.h support.h interface.h

    $(CC) $(CFLAGS) -c callbacks.c -o callbacks.o $(GTK_CONFIG_CFLAGS)

    clean:

    rm -f *.o test

    $ make

    成功编译并在开发板上运行

    第二种方法

    画好界面,点击联编后,命令行输入

    # ./autogen.sh
    # export CC=mipsel-linux-gcc
    # ./configure --host=mipsel --build=i686 --target=mipsel --with-gtk-exec-
       prefix=/opt/mipsel/mipsel-linux

    # make

     
  • 相关阅读:
    三种常用排序理论
    无参带返回类型方法练习
    无参带返回类型方法总结
    Java_无参数无返回类型方法及练习
    Java_方法的调用②及案例
    方法内存分析(进栈(压栈)、出栈(弹栈))
    Java_方法的基本语法格式
    Java_方法的调用①及案例
    Java_方法的定义以及分类
    Java_break与continue区别
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/1935773.html
Copyright © 2020-2023  润新知