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!\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);
}
下面命令编译运行
$ 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)前面有感叹号,则说明上面的几项配置存在问题。
Ubuntu 12.04下搭建Qt开发环境的更多相关文章
- ubuntu 12.04LTS下搭建Andriod开发环境记录
今天在Ubuntu 12.04 LTS 下安装了android开发环境. 1, 安装JDK 先去 Oracle下载Linux下的JDK压缩包,我下载的是jdk-7u4-linux-i586.tar.g ...
- ubuntu 14.04下搭建esp32开发环境
esp32是乐鑫出品的一款集成了wifi和蓝牙的集成模块,板上自带两个哈佛结构的Xtensa LX6 CPU双核处理器,本文主要讲解如何在linux下搭建其编译开发环境. 首先ctrl+alt+t打开 ...
- 如何在ubuntu 12.04下搭建Python Django环境
1. 检查python是否安装:直接在shell里输入python,如果已经安装了python,即可进入python bash,并看到版本号(如Python 2.7.3) ——在ubuntu中pyth ...
- Ubuntu 14.04下搭建 Android 开发环境(1) -JDK安装
1.下载最新的jdk安装,地址:http://www.oracle.com/technetwork/java/javase/downloads/ 2.解压jdk-8u20-linux-x64.gz,我 ...
- OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
/******************************************************************************************** * OK33 ...
- ubuntu 12.04下安装Qt出现cannot execute binary file的解决方案
最近在ubuntu 12.04下安装QT的过程中,遇到一个问题. ./qt-opensource-linux-x64-5.7.0.run出现了bash: ./qt-opensource-linux-x ...
- Andorid开发学习---ubuntu 12.04下搭建超好用的安卓模拟器genymotion 安装卸载virtualbox 4.3
什么是Genymotion? Genymotion是一套完整的工具,它提供了Android虚拟环境.它简直就是开发者.测试人员.推销者甚至是游戏玩家的福音. Genymotion支持Windows.L ...
- ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
最近,经理让我搭建一个服务器,我从网上找了一篇比较好的教程,按教程一步步执行感觉挺顺利,所以准备整理一下这个教程.尊重原版注明出处:http://news.2ky.cn/Linux/ubuntu-12 ...
- ubuntu 12.04 下搭接Qt 嵌入式开发环境
1.安装前的准备工作 (1)有ubuntu12.04 的系统镜像(也可以其他linux 如Fedorea9),都是安装好的 (2)虚拟机VMWare 或 VirtualBox ,两者都可以,都是安装好 ...
随机推荐
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/2,所以微信支付的 ...
- Ubuntu虚拟机与Window、Arm的通信
Ubuntu虚拟机与Window的通信安装有Ubuntu14.04的虚拟机VMware,将虚拟机的网络适配器配置成NAT类型(默认使用VMnet8进行通信),此时将Ubuntu的IP地址设置成与VMn ...
- Ajax的理解
初学JS,一直认为Ajax是个很高级的.不可亵玩的东西.这两天怀着忐忑的心情接触了一下它, 感觉它并没有想象中的那么难理解. 其实,Ajax就是浏览器端向服务器请求资源的一个对象(方法). 就跟打电话 ...
- SVN备份教程(二)
上次的博文中SVN备份教程(一)我们简单介绍了一下SVN备份是如何操作的,今天我们接着将上次的问题进行优化. 1.问题回顾 在讲之前,我们先来将上次的问题重申一下.之前的SVN备份存在的问题很简单,每 ...
- dive into python 读笔(1)
chapter2 and 3: 使用Python IDE来交互式地测试表达式 编写Python程序并且从IDE运行,或者从命令行运行 导入模块及调用它们的函数 声明函数以及doc string.局部变 ...
- EvnetBus
领域事件(EvnetBus) 文档目录 本节内容: EventBus 注入 IEventBus 获取默认实例 定义事件 预定义事件 处理完异常 实体修改 触发事件 处理事件 处理基类事件 处理程序 ...
- C# 读XML文件
/// <summary> /// xml文件路径+名称 /// </summary> public void ReadXml(string xmlname) { try { ...
- Recommender Systems 基于知识的推荐
前两章的协同过滤和就内容的推荐都建立在“大量数据”的基础上,运用概率方法来进行计算和预测.不过,在现实生活中,有些物品,如:汽车.房屋.计算机,用户不会频繁的消费.如何在这种情况下对用户进行推荐? 这 ...
- C#取中间文本
/// <summary> /// 取中间文本 + static string GetMiddleStr(string oldStr,string preStr,string nextSt ...
- CSRF攻击原理解析与对策研究
1.引言 跨站点请求伪造(Cross—Site Request Forgery).以下简称CSRF.是一种广泛存在的网站漏洞.Gmail.YouTube等著名网站都有过CSRF漏洞.甚至包 ...