• Ubuntu 12.04下搭建Qt开发环境


    http://download.qt.io/official_releases/qt/

    Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04)

    1.配置基础开发环境GCC

    刚装好的系统中已经有GCC了,但是这个GCC几乎什么文件都不能编译,因为缺少一些必须的头文件,所以要安装build-essential这个软件包。可以在新立得里面搜索build-essential或输入下面命令:

    sudo apt-get install build-essential程序示例

    安装完成后写一个C语言程序testc.c测试一下。

    程序示例:

    hello.c

    #include <stdio.h>
    int main()
    {
        printf ("Hello Ubuntu!");
        return 0;
    }

    编译运行:
    $ gcc testc.c -o testc
    $ ./testc

    输出:
    Hello Ubuntu!

    2.安装GTK/GNOME开发环境
    安装GTK环境只要安装一个libgtk2.0-dev就可以了,而安装gnome开发环境的话,需要装gnome-core-devel,它包含GTK开发包。但在一般情况下,我们需要有一个ide开发环境,需要帮助文件,于是我们安装
    sudo apt-get install gnome-devel gnome-devel-docs
    程序示例
    安装完成后我们也同样做个测试程序 (CodeLanguage : C , only 1 header file )

    hello-ubuntu_gnome.c

    #include <gtk/gtk.h>
    void hello(GtkWidget *widget,gpointer data)
    {
            g_print("Hello Ubuntu! ");
    }
    gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
    {
            g_print ("delete event occurred ");
            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 gtktest.c -o gtktest  `pkg-config --cflags --libs gtk+-2.0`

    $ ./gtktest

    //`pkg-config--cflags --libs gtk+-2.0`库引用

    显示一个带有一个按钮的窗口,点击按钮以后窗口关闭,命令行显示HelloUbuntu!

    Qt开发环境的搭建,具体可按整个项目的开发环境来决定... 例如:本人的电脑主系统是Win7,并且公司提供专门的服务器来编译项目,这样就可以将程序的编辑与编译分开了。这次是在虚拟机里的Ubuntu下搭建一个开发环境,仅当练练手。好,不罗嗦了...

     /* ----------------------  ----------------------  ----------------------  ----------------------  ----------------------  ----------------------  ----------------------  ----------------------  */

    搭建流程:

    1.安装Qt Creator

    2.安装交叉编译器

    3.编译directfb (这只是为了提高板端程序的图形渲染性能,故加入DirectFb图形加速层)

    4.修改、配置、编译Qt库

    一。因为是在linux下做开发,因此获取qt-creator-linux-x86-opensource-2.7.1.bin,并执行如下操作:

       sudo./qt-creator-linux-x86-opensource-2.7.1.bin

       此时如果打开Qt Creator出错,是因为文件所有者的问题,在用户主目录下执行如下操作:

       chown -R ***:*** ~/.config/QtProject         (***为当前用户名)

       此时若~/.config/下未找到QtProject目录,稍后再执行此操作也行。

    二。

       1.如果是安装桌面版的Qt库,直接执行如下操作即可:

         1).解压源码包:tar xvzf qt-everywhere-opensource-src-4.8.4.tar.gz

         2).配置Qt库:在源码目录下执行 ./configure -fast

         3).编译:在源码目录下 make -j8 (用多个作业线程去完成编译工作,可能会耗时半小时左右)

         4).安装:sudo make install

       2.安装嵌入式版Qt库(因为本人写的Qt程序是要放到嵌入式产品中运行的,而嵌入式产品的硬件资源等都是受限的,因此就会涉及库的裁剪、

         配置,以及加入DirectFb等等)

         1).安装海思交叉编译器:

            a).解压源码包:tar xvfz Hi3531_SDK_V1.0.7.3.tgz,解压后生成Hi3531_SDK_V1.0.7.3_B010目录

            b).修改HISIV-SDK/Hi3531_SDK_V1.0.7.3_B010/下的sdk.unpack脚本,我们使用的是bash而非sh,将sdk.unpack第一行改为

               #!/bin/bash

            c).解压sdk:./sdk.unpack

            d).板端程序使用的交叉编译器为arm-hisiv100nptl-linux,因此

               ***/Hi3531_SDK_V1.0.7.3_B010$ cd osdrv/toolchain/arm-hisiv100nptl-linux/

               ***/osdrv/toolchain/arm-hisiv100nptl-linux$ chmod 755 cross.install

            e).安装:./cross.install

         2).编译directfb

            a).解压directfb源码包:tar xvzf directfb-1.5.3.tar.gz,解压后会生成directfb目录

            b). cd directfb/

            c). ***/directfb/$ ./ci.sh后会提示:

               $ please select the process type:(1)multi(2)single:

               选择2;

               $ please select the compile type:(1)debug(2)release:

               选择2

               编译完成后会在当前目录下生成directfb目录,该directfb目录下的include 和 lib里就包含了编译Qt库时要用到的头文件和

               库文件;将该directfb目录拷贝到/opt/下

               ***$ cp -R directfb /opt/ (由于Qt库编译时使用的绝对路径,一旦directfb的路径改变了,编译Qt程序会出错,故将

               directfb目录放到/opt/下)

          3).修改编译Qt库的配置文件:目的有二,1.指定Qt到何处引用和连接directfb头文件和动态库,2.指定编译Qt库时的编译参数。

             解压嵌入式版Qt库源码包:tar xvzf qt-arm-4.8.4-dfb.tar.gz,接着cd qt-arm-4.8.4-dfb/

             修改mkspecs/qws/linux-hisi-g++/qmake.conf,操作如下:

             vim mkspecs/qws/linux-hisi-g++/qmake.conf

             添加变量

             QT_CFLAGS_DIRECTFB = -D_REENTRANT-I/opt/directfb/include/directfb

             QT_LIBS_DIRECTFB = -L/opt/directfb/lib-ldirectfb -lfusion -ldirect -lpthread

             这样directfb库可以被Qt库正确链接到了。

            

             指定交叉编译器使用的指令集及架构,操作如下(继续在qmake.conf中添加)

             QMAKE_CFLAGS_RELEASE    = -O2 -march=armv7-a -mcpu=cortex-a9

             QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE

             保存退出。

     

             使用qt-arm-4.8.4-dfb/tools/下的qconfig工具裁剪Qt(这一步本人页没太弄明白,还请路过的大虾指点!)

             这些工具都是以源代码的形式提供,为了使用方便,我们一般编译将其编译成PC上运行的工具,编译方法也很简单,

               前面已经编译过了桌面版的Qt库,其实在执行./configure时,qconfig源代码目录就已经生成了Makefile,

               现在只需进入该目录执行一下make就可生成qconfig可执行文件,./qconfig运行起来后就可以看到界面了,

               将其生成的qconfig-xxxx.h文件(例如生成的qconfig-samsung.h)放到src/corelib/global目录后就可以在

               ./configure时用-qconfig xxxx(例如:-qconfig samsung)的方式来使用

     

                配置Qt库:

                  ./configure -opensource  -confirm-license-release -static -fast -nomake tools

               -nomake examples -nomake demos -nomakedocs -nomake translations -no-largefile 

               -no-exceptions -no-accessibility -no-stl -no-qt3support -no-gif-no-libtiff -no-libmng

               -no-libjpeg -no-rpath -no-nis -no-cups -no-iconv  -no-pch -no-dbus -no-mmx -no-3dnow -no-sse

               -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon-optimized-qmake

               -no-multimedia -no-phonon -no-phonon-backend -no-audio-backend-no-openssl -no-gtkstyle

               -no-svg -no-webkit -no-javascript-jit -no-script-no-scripttools -no-declarative

               -no-declarative-debug -no-sql-sqlite  -no-sql-sqlite -no-sql-sqlite2-no-system-proxies 

               -no-xmlpatterns-little-endian  -host-little-endian  -no-freetype -no-opengl -depths all

               -qt-decoration-styled -qt-gfx-directfb -no-gfx-linuxfb -no-gfx-multiscreen-qt-kbd-linuxinput 

               -no-glib -embeddedarm -xplatform qws/linux-hisi-g++ -qconfig samsung

     

               想了解上面各项的含义可以:./config --help即可查看一般项;./configure -embedded arm --help可查看一般项和

               嵌入式平台特有项。

     

             接着编译、安装:

                         $ make -j8

                         $ sudo make install

                 

    三。配置Qt Creator

        

    如果Desktop(default)前面有感叹号,则说明上面的几项配置存在问题。

  • 相关阅读:
    紫外传感器波长
    常见设备功耗
    点型感温火灾探测器研发思路
    C#使用Linq to XML进行XPath查询
    题解 最大获利
    题解 走迷宫
    2020-11-16 考试题解
    题解 最小生成树
    题解 「BZOJ4919 Lydsy1706月赛」大根堆
    题解 2020.10.24 考试 T4 模板
  • 原文地址:https://www.cnblogs.com/timssd/p/4266700.html
Copyright © 2020-2023  润新知