如何建立Linux下的ARMlinux arm 交叉编译译环境

最简单的方法就是下载一个buildtoolchain.tar.gz安装就行了,有时候就是想自己亲身体验一下安装定制过程,Linux的乐趣也在这点。从网上搜集了些资料,以备日后查阅。&&&& 如何为嵌入式开发建立交叉编译环境
&& && language=java type=text/java script&&&&&&& &&
&梁元恩 , 软件工程师
2005 年 9 月
&&&&&&& 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。
随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。
在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc 几个部分组成。有时出于减小 libc 库大小的考虑,你也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。
下面我们将以建立针对arm的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要作一些对应的改动。我的开发环境是,宿主机 i386-redhat-7.2,目标机 arm。
这个过程如下
1. 下载源文件、补丁和建立编译的目录
2. 建立内核头文件
3. 建立二进制工具(binutils)
4. 建立初始编译器(bootstrap gcc)
5. 建立c库(glibc)
6. 建立全套编译器(full gcc)
下载源文件、补丁和建立编译的目录
1. 选定软件版本号
选择软件版本号时,先看看glibc源代码中的INSTALL文件。那里列举了该版本的glibc编译时所需的binutils 和gcc的版本号。例如在 glibc-2.2.3/INSTALL 文件中推荐 gcc 用 2.95以上,binutils 用 2.10.1 以上版本。
我选的各个软件的版本是:
linux-2.4.21+rmk2binutils-2.10.1gcc-2.95.3glibc-2.2.3glibc-linuxthreads-2.2.3
如果你选的glibc的版本号低于2.2,你还要下载一个叫glibc-crypt的文件,例如glibc-crypt-2.1.tar.gz。 Linux 内核你可以从 或它的镜像下载。
Binutils、gcc和glibc你可以从FSF的FTP站点 或它的镜像去下载。在编译glibc时,要用到 Linux 内核中的 include 目录的内核头文件。如果你发现有变量没有定义而导致编译失败,你就改变你的内核版本号。例如我开始用linux-2.4.25+vrs2,编译glibc-2.2.3 时报 BUS_ISA 没定义,后来发现在 2.4.23 开始它的名字被改为 CTL_BUS_ISA。如果你没有完全的把握保证你改的内核改完全了,就不要动内核,而是把你的 Linux 内核的版本号降低或升高,来适应 glibc。
Gcc 的版本号,推荐用 gcc-2.95 以上的。太老的版本编译可能会出问题。Gcc-2.95.3 是一个比较稳定的版本,也是内核开发人员推荐用的一个 gcc 版本。
如果你发现无法编译过去,有可能是你选用的软件中有的加入了一些新的特性而其他所选软件不支持的原因,就相应降低该软件的版本号。例如我开始用 gcc-3.3.2,发现编译不过,报 as、ld 等版本太老,我就把 gcc 降为 2.95.3。太新的版本大多没经过大量的测试,建议不要选用。
2. 建立工作目录
首先,我们建立几个用来工作的目录:
在你的用户目录,我用的是用户liang,因此用户目录为 /home/liang,先建立一个项目目录embedded。
$pwd&/home/liang$mkdir embedded&
再在这个项目目录 embedded 下建立三个目录 build-tools、kernel 和 tools。
build-tools-用来存放你下载的 binutils、gcc 和 glibc 的源代码和用来编译这些源代码的目录。
kernel-用来存放你的内核源代码和内核补丁。
tools-用来存放编译好的交叉编译工具和库文件。
$cd embedded$mkdir& build-tools kernel tools&
执行完后目录结构如下:
$ls embeddedbuild-tools kernel tools&
3. 输出和环境变量
我们输出如下的环境变量方便我们编译。
$export PRJROOT=/home/liang/embedded$export TARGET=arm-linux$export PREFIX=$PRJROOT/tools$export TARGET_PREFIX=$PREFIX/$TARGET$export PATH=$PREFIX/bin:$PATH&
如果你不惯用环境变量的,你可以直接用绝对或相对路径。我如果不用环境变量,一般都用绝对路径,相对路径有时会失败。环境变量也可以定义在.bashrc文件中,这样当你logout或换了控制台时,就不用老是export这些变量了。
体系结构和你的TAEGET变量的对应如下表
你可以在通过glibc下的config.sub脚本来知道,你的TARGET变量是否被支持,例如:
$./config.sub& arm-linuxarm-unknown-linux-gnu&
在我的环境中,config.sub 在 glibc-2.2.3/scripts 目录下。
网上还有一些 HOWTO 可以参考,ARM 体系结构的《The GNU Toolchain for ARM Target HOWTO》,PowerPC 体系结构的《Linux for PowerPC Embedded Systems HOWTO》等。对TARGET的选取可能有帮助。
4. 建立编译目录
为了把源码和编译时生成的文件分开,一般的编译工作不在的源码目录中,要另建一个目录来专门用于编译。用以下的命令来建立编译你下载的binutils、gcc和glibc的源代码的目录。
$cd $PRJROOT/build-tools$mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch&
build-binutils-编译binutils的目录build-boot-gcc-编译gcc 启动部分的目录build-glibc-编译glibc的目录build-gcc-编译gcc 全部的目录gcc-patch-放gcc的补丁的目录
gcc-2.95.3 的补丁有 gcc-2.95.3-2.patch、gcc-2.95.3-no-fixinc.patch 和gcc-2.95.3-returntype-fix.patch,可以从
下载到这些补丁。
再将你下载的 binutils-2.10.1、gcc-2.95.3、glibc-2.2.3 和 glibc-linuxthreads-2.2.3 的源代码放入 build-tools 目录中
看一下你的 build-tools 目录,有以下内容:
$ls binutils-2.10.1.tar.bz2&&&& build-gcc&&&gcc-patchbuild-binutls&&&&&&&&&&& build-glibc &&&&&&&& glibc-2.2.3.tar.gzbuild-boot-gcc&&&&&&&&&& gcc-2.95.3.tar.gz&glibc-linuxthreads-2.2.3.tar.gz&
建立内核头文件
下载的内核源代码放入 $PRJROOT /kernel 目录
进入你的 kernel 目录:
$cd $PRJROOT /kernel&
解开内核源代码
$tar -xzvf linux-2.4.21.tar.gz&
$tar -xjvf linux-2.4.21.tar.bz2&
小于 2.4.19 的内核版本解开会生成一个 linux 目录,没带版本号,就将其改名。
$mv linux linux-2.4.x&
给 Linux 内核打上你的补丁
$cd linux-2.4.21$patch -p1 & ../patch-2.4.21-rmk2&
编译内核生成头文件
$make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
你也可以用 config 和 xconfig 来代替 menuconfig,但这样用可能会没有设置某些配置文件选项和没有生成下面编译所需的头文件。推荐大家用 make menuconfig,这也是内核开发人员用的最多的配置方法。配置完退出并保存,检查一下的内核目录中的 include/linux/version.h 和 include/linux/autoconf.h 文件是不是生成了,这是编译 glibc 是要用到的,version.h 和 autoconf.h 文件的存在,也说明了你生成了正确的头文件。
还要建立几个正确的链接
$cd include$ln -s asm-arm asm$cd asm$ln -s arch-epxa arch$ln -s proc-armv proc&
接下来为你的交叉编译环境建立你的内核头文件的链接
$mkdir -p $TARGET_PREFIX/include$ln -s $PRJROOT/kernel/linux-2.4.21/include/linux& $TARGET_PREFIX/include/linux$in -s $PRJROOT/kernel/linux-2.4.21/include/asm-arm& $TARGET_PREFIX/include/asm&
也可以把 Linux 内核头文件拷贝过来用
$mkdir -p $TARGET_PREFIX/include$cp -r $PRJROOT/kernel/linux-2.4.21/include/linux& $TARGET_PREFIX/include$cp -r $PRJROOT/kernel/linux-2.4.21/include/asm-arm& $TARGET_PREFIX/include&& &
建立二进制工具(binutils)
binutils是一些二进制工具的集合,其中包含了我们常用到的as和ld。
首先,我们解压我们下载的binutils源文件。
$cd $PRJROOT/build-tools$tar -xvjf binutils-2.10.1.tar.bz2&
然后进入build-binutils目录配置和编译binutils。
$cd build-binutils$../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX&
--target 选项是指出我们生成的是 arm-linux 的工具,--prefix 是指出我们可执行文件安装的位置。
会出现很多 check,最后产生 Makefile 文件。
有了 Makefile 后,我们来编译并安装 binutils,命令很简单。
$make$make install&
看一下我们 $PREFIX/bin 下的生成的文件
$ls $PREFIX/binarm-linux-addr2line&arm-linux-gasp&arm-linux-objdump&&arm-linux-stringsarm-linux-ar&&&arm-linux-ld&&arm-linux-ranlib&&arm-linux-striparm-linux-as&&&arm-linux-nm&&arm-linux-readelf&arm-linux-c++filt&&arm-linux-objcopy&arm-linux-size&
我们来解释一下上面生成的可执行文件都是用来干什么的
add2line - 将你要找的地址转成文件和行号,它要使用 debug 信息。
Ar-产生、修改和解开一个存档文件
As-gnu 的汇编器
C++filt-C++ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c++filt 就是实现这种反向的转化,根据标号得到函数名。
Gasp-gnu 汇编器预编译器。
Ld-gnu 的连接器
Nm-列出目标文件的符号和对应的地址
Objcopy-将某种格式的目标文件转化成另外格式的目标文件
Objdump-显示目标文件的信息
Ranlib-为一个存档文件产生一个索引,并将这个索引存入存档文件中
Readelf-显示 elf 格式的目标文件的信息
Size-显示目标文件各个节的大小和目标文件的大小
Strings-打印出目标文件中可以打印的字符串,有个默认的长度,为4
Strip-剥掉目标文件的所有的符号信息
建立初始编译器(bootstrap gcc)
首先进入 build-tools 目录,将下载 gcc 源代码解压
$cd $PRJROOT/build-tools$tar -xvzf& gcc-2.95.3.tar.gz&
然后进入 gcc-2.95.3 目录给 gcc 打上补丁
$cd gcc-2.95.3$patch -p1& ../gcc-patch/gcc-2.95.3.-2.patch$patch -p1& ../gcc-patch/gcc-2.95.3.-no-fixinc.patch$patch -p1& ../gcc-patch/gcc-2.95.3-returntype-fix.patchecho timestamp & gcc/cstamp-h.in&
在我们编译并安装 gcc 前,我们先要改一个文件 $PRJROOT/gcc/config/arm/t-linux,把TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC这一行改为TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h
你如果没定义 -Dinhibit,编译时将会报如下的错误
/gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such file or directory/gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such file or directorymake[3]: *** [libgcc2.a] Error 1make[2]: *** [stmp-multilib-sub] Error 2make[1]: *** [stmp-multilib] Error 1make: *** [all-gcc] Error 2&
如果没有定义 -D__gthr_posix_h,编译时会报如下的错误
In file included from gthr-default.h:1,&&&&&&&&&&&&&&&& from /gcc-2.95.3/gcc/gthr.h:98,&&&&&&&&&&&&&&&& from /gcc-2.95.3/gcc/libgcc2.c:3034:/gcc-2.95.3/gcc/gthr-posix.h:37: pthread.h: No such file or directorymake[3]: *** [libgcc2.a] Error 1make[2]: *** [stmp-multilib-sub] Error 2make[1]: *** [stmp-multilib] Error 1make: *** [all-gcc] Error 2&
还有一种与-Dinhibit同等效果的方法,那就是在你配置configure时多加一个参数-with-newlib,这个选项不会迫使我们必须使用newlib。我们编译了bootstrap-gcc后,仍然可以选择任何c库。
接着就是配置boostrap gcc, 后面要用bootstrap gcc 来编译 glibc 库。
$cd ..; cd build-boot-gcc$../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX \&--without-headers& --enable-languages=c --disable-threads&
这条命令中的 -target、--prefix 和配置 binutils 的含义是相同的,--without-headers 就是指不需要头文件,因为是交叉编译工具,不需要本机上的头文件。-enable-languages=c是指我们的 boot-gcc 只支持 c 语言。--disable-threads 是去掉 thread 功能,这个功能需要 glibc 的支持。
接着我们编译并安装 boot-gcc
$make all-gcc$make install-gcc&
我们来看看 $PREFIX/bin 里面多了哪些东西
$ls $PREFIX/bin&
你会发现多了 arm-linux-gcc 、arm-linux-unprotoize、cpp 和 gcov 几个文件。
Gcc-gnu 的 C 语言编译器
Unprotoize-将 ANSI C 的源码转化为 K&R C 的形式,去掉函数原型中的参数类型。
Cpp-gnu的 C 的预编译器
Gcov-gcc 的辅助测试工具,可以用它来分析和优程序。
使用 gcc3.2 以及 gcc3.2 以上版本时,配置 boot-gcc 不能使用 --without-headers 选项,而需要使用 glibc 的头文件。
建立 c 库(glibc)
首先解压 glibc-2.2.3.tar.gz 和 glibc-linuxthreads-2.2.3.tar.gz 源代码
$cd $PRJROOT/build-tools$tar -xvzf glibc-2.2.3.tar.gz$tar -xzvf glibc-linuxthreads-2.2.3.tar.gz --directory=glibc-2.2.3&
然后进入 build-glibc 目录配置 glibc
$cd build-glibc$CC=arm-linux-gcc ../glibc-2.2.3/configure --host=$TARGET --prefix="/usr" --enable-add-ons --with-headers=$TARGET_PREFIX/include&
CC=arm-linux-gcc 是把 CC 变量设成你刚编译完的boostrap gcc,用它来编译你的glibc。--enable-add-ons是告诉glibc用 linuxthreads 包,在上面我们已经将它放入了 glibc 源码目录中,这个选项等价于 -enable-add-ons=linuxthreads。--with-headers 告诉 glibc 我们的linux 内核头文件的目录位置。
配置完后就可以编译和安装 glibc
$make$make install_root=$TARGET_PREFIX prefix="" install&
然后你还要修改 libc.so 文件
将GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)
改为GROUP ( libc.so.6 libc_nonshared.a)
这样连接程序 ld 就会在 libc.so 所在的目录查找它需要的库,因为你的机子的/lib目录可能已经装了一个相同名字的库,一个为编译可以在你的宿主机上运行的程序的库,而不是用于交叉编译的。
建立全套编译器(full gcc)
在建立boot-gcc 的时候,我们只支持了C。到这里,我们就要建立全套编译器,来支持C和C++。
$cd $PRJROOT/build-tools/build-gcc$../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++&
--enable-languages=c,c++ 告诉 full gcc 支持 c 和 c++ 语言。
然后编译和安装你的 full gcc
$make all$make install&
我们再来看看 $PREFIX/bin 里面多了哪些东西
$ls $PREFIX/bin&
你会发现多了 arm-linux-g++ 、arm-linux-protoize 和 arm-linux-c++ 几个文件。
G++-gnu的 c++ 编译器。
Protoize-与Unprotoize相反,将K&R C的源码转化为ANSI C的形式,函数原型中加入参数类型。
C++-gnu 的 c++ 编译器。
到这里你的交叉编译工具就算做完了,简单验证一下你的交叉编译工具。
用它来编译一个很简单的程序 helloworld.c
#i nclude
int main(void){&printf("hello world\n");&return 0;}
$arm-linux-gcc helloworld.c -o helloworld$file helloworldhelloworld: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), not stripped&
上面的输出说明你编译了一个能在 arm 体系结构下运行的 helloworld,证明你的编译工具做成功了。&
本文来自CSDN博客,转载请标明出处:
阅读(...) 评论()Ubuntu配置安装ARM Linux交叉编译环境完整流程
10:39:14来源: eefocus
& & & & & & &今天花了一整天的时间来解决insight 的端口无法修改的问题,虽然是解决了,但是也付出了很大的代价,花了一整天时间+毁掉了以前的系统。所以来重新安装配置 linux。顺便记下.....
&&&&&&1.虚拟机安装ubuntu9.10,这个很简单了不需累述了,安装前vmware会让你选择划分多大的硬盘,其实这个并不会是真的立即分离出那么大的空间出来,即使你目前只剩下5g,你也可以要求划分30g,你指定的只是一个上限值,最好设置大一点,以免以后不够用又重新配置。虚拟机安装好了第一件事自然是安装vmware tool了,然后就是选择好ubuntu的软件源,中国的cn99很不错,apt-get update更新下,便于之后装软件,我一般直接用的root用户,免得麻烦,设置root密码 sudo passwd root,之后就可以切换了。
&&&&& 2.ubuntu自带的gcc版本比较高,语法要求很严格,会对我们以后编译安装某些软件很不利,要选择4.2以下的,ok,就装4.2吧,用ubuntu的命令安装最安全省事,如果下载源码编译安装,会累死人的
&&&&&&&&&&& apt-get install gcc-4.2
&&&&&&&& 然后修改我们默认的gcc,gcc在/usr/bin下面,它其实只是一个软链接,删除了,然后重新指定一下。切换到/usr/bin目录,安装好的gcc4.2就在这里,建立软链接
&&&&&&&&&&&&ln -s gcc-4.2 gcc
&&&&&&&& 运行gcc -v下,是否显示正确。,很简单啦
&&&&&&3.安装交叉编译器,网上去下载一个好的交叉编译工具链吧,我用的3.4.1,这个更简单了,解压之,然后将其中的arm文件夹移动到你想放的地方,譬如/usr/local/& 下,再将其bin文件路径/usr/local/arm/3.4.1/bin添加进/etc/environment& 下,我们就可以直接使用arm-linux-gcc了
&&&&&&&4.安装insight,也是今天的重点,insight是基于gdb的,所以gdb需要的环境是一定要有的,新力德安装libx11-dev libncurses5-dev和libc6-dev这3个依赖文件,先安装好啊,不然等出错了再安装需要重新编译,麻烦死了。insight编译之前,要修改下源码,就是修改默认的端口,否则会是1000不能改的,因为我用的是jlink,其端口2331是不能修改的,所以只有修改gdb的端口了,找到/gdb/gdbtk/libaray/targetselection.itb&& ,查找1000,将其修改为2331(jlink端口)这里还需要注意一点,如果你跟我一样一定要修改insight端口,一定要看仔细了,这是insight第一次编译安装,如果你以前安装过又删除了,再按照我这样修改编译安装 是不会有效的,除非你保证卸载的非常干净(其实源码make uninstall啥都没有写),否则,你得重新安装系统了!配置insight:
&&&&&&&&& ./configure --target=arm-linux& --enable-sim& --prefix=/usr/local/insight
&&&&&&&&&& 编译时间一般都很长,然后make&; make install
&&&&&&&&&&最后添加其路径到系统中去,修改/etc/environment 添加/usr/local/insight/bin. 更新下此文件 source /etc/environment
&&&&&&&然后就是编译出gdbserver了,
&&&&&&&&& ~/gdb-6.8/gdb/gdbserver$ ./configure --target=arm-linux --host=arm-linux
&&&&&&&&& ~/gdb-6.8/gdb/gdbserver$ make CC=arm-linux-gcc&&&&&&& 指定编译器,也可以直接指定路径
&&&&&&&& 这样在gdb-6.8/gdb/gdbserver目录下就生成了一个gdbserver可执行文件,拷贝到目标开发板上
&&&&&&&5.eclipse的安装
&&&&&&&& 这个是个IDE,其实我不用这个东西的,只是有点好奇,安装来玩玩,我真正使用的是windows下面的source insight编辑,然后ubuntu编译,用jlink+insight调试,咱不追求什么纯windows 纯linux啥的,怎么方便怎么来
&&&&&&&& 安装java
&&&&&&&& apt-get install sun-java-jre
&&&&&&&&& apt-get install sun-java-jdk
&&&&&&&& 选择默认 java:sudo update-alternatives --config java
&&&&&& 以上虽然写的很简单,但是确是我长久以来花费了大量时间的血泪经验史啊,以前为了这些简单的东西 弄了很久很久,譬如编译安装gcc4.2,人都能搞疯,依赖软件多,编译时间超长,又不知道可以直接安装而不必编译安装,都是不动脑子 死搬硬套别人的文章造成的后果,以后凡遇事要多动动脑子,目标明确有选择性的去做!
关键字:&&&&&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
TTI携TE传感器样片与你相见,一起传感未来
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。如何搭建交叉编译环境
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
QT MPlayer移植及交叉编译环境是本文要介绍的内容,MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix系统、微软的视窗系统及苹果电脑的Mac OS X系统。MPlayer是建基于命令行界面,在各作业系统可选择安装不同的图形界面。MPlayer的另一个大的特色是广泛的输出设备支持。
一、首先要建立交叉编译环境
1、首先搭建交叉编译环境
(1)将arm-linux-gcc-4.4.3.tar.gz解压到一个空文件夹中
#tar zvxf arm-linux-gcc-4.4.3.tar.gz &C / (C的后面有空格)
1. #gedit /root/.bashrc
2. 将路径改为/opt/FriendlyARM/toolschain/4.4.3/bin
3. expotr PATH=$PATH:/ opt/FriendlyARM/toolschain/4.4.3/bin
上面两行是同一条命令!
保存退出之后,要重启一下机子命令如下
1. #reboot
重启之后查看是否编译成功
1. # arm-linux-gcc &v
在最后一行如果出现了版本号就是编译成功了
修改编译调用的库链接
1. # strings /usr/lib/libstdc++.so.6 | grep GLIBC
结果的最后一句话:
1. GLIBCXX_3.4 没有GLIBCXX_3.4.9
2. # ls -l /usr/lib/libstdc++.so.6
结果链接(快捷方式)为
1. /usr/lib/libstdc++.so.6 -& libstdc++.so.6.0.8
2. # rm &rf /usr/lib/libstdc++.so.6 -& libstdc++.so.6.0.8
3. #ls -l /usr/lib/libstdc++.so.6
出现:/usr/lib/libstdc++.so.6:没有那个文件或目录
把(资源)libstdc++.so.6.0.10放入/usr/lib中
重新做链接
1. #ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6
二、QT 安装
qt-sdk-linux-x86-opensource-.bin
2、增加权限
Chmod 777 qt-sdk-linux-x86-opensource-.bin
./ qt-sdk-linux-x86-opensource-.bin
4、升级Linux5的fontconf库
(1)将fontconf-2.3.0.tar.gz放入/root/qt中
(2)#cd fontconf
(3)./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
(5)#make install
5、升级freetype库
(1)将freetype-2.3.0.tar.gz放入/usr/local中
(2)#cd /usr/local
(3)#tar zxvf freetype-2.3.0.tar.gz
(4)#./configure
(5)#make
(6)#make install
6、改变环境变量
1. vim ~/.bash_profile
添加如下:
1. QTDIR=/opt/qtsdk-2010.05/qt(安装路径一定要写对)
2. QTLIB=$QTDIR/lib
3. QTINC=$QTDIR/include
4. PATH=$QTDIR/bin:$PATH
保存退出之后
1. #source ~/.bash_profile
2. #which qmake
查看显示如果结果是?/opt/qtsdk-2010.05/qt/bin/qmake,表示设置正确
7、把QT的库路径加入so的搜索路径.
在调试QT程序时,QTCreator是在后台调用gdb来调试,因此必须要系统知道从哪里找QT的动态库.一般比较好的办法是将其加入到系统so的路径,方法是修改/etc/ld.so.conf
1. #vi /etc/ld.so.conf
2. 把/opt/qtsdk-2010.05/qt/lib作为一行写入这个文件.存盘后执行命令
3. # ldconfig 让路径生效
可以使用如下命令检查输出结果是否正确:
1. #env |grep QT
查看配置的四项内容是否挣钱
(1)将虚拟机汉化一下
打开汉化包有五个QM文件
1.将这些文件复制到QT安装目录下的share/qtcreator/translations和qt/translations文件夹,覆盖(overwrite)原来的内容
2.重新启动qt,就完成了汉化
如果汉化不成功,可以选择qt的toos-&options,在环境配置窗口中,选择左侧的enviroment,在右侧找到language,选择其中的chinese。
(2)将虚拟机重启(reboot)或者注销一下
(3)检查QtCreator是否能找到Qmake
在主菜单tools--&Options--&Qt4.QtVersion,如果Auto-Dected能找到QT4.7的qmake则能正常编译.
(4)可以直接在Xshell中运行qt!方法是在命令行输入:
1. #cd /opt/qtsdk-2010.05/bin (这样可以直接在级别3下运行QT,速度快!省内存)
2. #./qtcreator
三、运行QT并创建一个项目
环境安装好后,就可以创建一个QT的应用程序.
1.用QtCreator程序向导几步就创建一个项目,而以前则是使用分散的工具来创建.
1.1选择主菜单File-&newfileorproject-&Qt4GUIApplication创建一个标准GUI程序.如下图&&&
1.2点击下方的choose&设置项目目录,即可快速建立一个项目
1.3可以直接主界面的运行按键来运行QT的程序。也能按调试软件来进行调试
1.3.1图形界面的一些控件
1、使用widget存放MP4播放时的视频位置
2、horizontal Slider控件来调节视频的进度!
3、再者就是push button 了
1.3.2按键的程序连接使用
选点按键?右键?转到槽(go to slot)
1.4 无程序调试运行
当界面做好了之后
点击运行按键
1.5 图形界面出来之后就可以给按键增加功能了右键go to
slot 进入程序首先在的头文件中添加一个库&qprocess&
在主窗口函数中添加指针
1. QProcess *
然后在源文件MainWindow.cpp文件中的主窗口函数中添加一
线程的实例化 process=new QProcess();
然后开始编程
(1)开始播放的程序
1. void MainWindow::on_start_clicked()
3. QString commend=&/root/qt/mplayer &; // -slave -quiet -ac mad & ;
4. QString file=&/root/qt/shi.avi &;
5. QString canshu=& -slave -quiet -ac mad -wid &+QString::number(ui-&widget-&winId());
6. process-&setProcessChannelMode(QProcess::MergedChannels);
7. process-&start(commend+file+canshu);
(2)视频暂停的程序
1. void MainWindow::on_stop_clicked()
3. if(isplaying){
4. process-&write(&pause\n&);
5. isplaying=
8. process-&write(&pause\n&);
9. isplaying=
(3)程序停止播放的程序
1. void MainWindow::on_exit_clicked()
3. process-&write(&quit\n&);
1.6 开始调试程序
点击run 按钮然后等待构建,如果出错修改,没错的话点击
四、将在PC机上面的播放器修改为可在开发板上面运行的QT界面
1、先要将4.6.3的QT编译包放到指定的位置/usr/local/Trolltech文件夹中,如果没有就创建
2、进入4.7.1的QT开发环境打开要编译的项目,选择 项目 图标,然后点击 概要?第二行做好一个管理(manege)按键
3、出现如下窗口,点击Qt4?右边的蓝色加号添加?浏览
选择/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin中的qmake 打开,会出现如下图像
如果没有出现&就点击右边的重新构建,然后点击应用?确认
4、重新回到了项目页面
然后选择管理前面的小黑色三角,选择 4.6.3拖动鼠标向下到 构建环境变量一行点击?详细
找到PATH、QTDIR、QTLIB、QTINC将之修改为4.6.3所在的位置
使用 系统环境变量 和
设置 PATH 为
1. /usr/local/Trolltech/QtEmbedded-4.6.3-arm
2. /bin:/opt/FriendlyARM/toolschain/4.4.3/bin:/opt/qtsdk-2010.05/qt/bin:/usr/lib/
3. qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/
4. usr/X11R6/bin:/opt/FriendlyARM/toolschain/4.4.3/bin:/root/bin
5. (红色的是添加的)
设置 QTDIR 为
1. /usr/local/Trolltech/QtEmbedded-4.6.3-arm
2. 设置 QTINC 为/usr/local/Trolltech/QtEmbedded-4.6.3-arm/include
设置 QTLIB 为
1. /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib
与此同时还要将生成文件的位置找好但别使用默认的
选定一个!
注:我命名的是MP7文件夹
然后点击run 按钮然后等待构建,又警告没事的,只要不是红色的感叹号就行其他的一切都不重要即使出现这个也没事的!
然后进入构建目录找到可执行文件拷到开发板上
五、在开发板上面
1、将mplayer test.wmv MP7三个程序复制到开发板的和PC机上运行的相同的位置下
注:我命名的叫MP7的QT
2、修改mplayer MP7的权限,使之可执行
3、将下列配置内容加入到开发板的/etc/profile文件。建议采用粘贴方式。否则输入太慢!
1. #configure for tslib
2. export TSLIB_ROOT=/usr/local
3. export TSLIB_TSDEVICE=/dev/input/event0
4. export TSLIB_CALIBFILE=/etc/pointercal
5. export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
6. export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
7. export TSLIB_CONSOLEDEVICE=none
8. export TSLIB_FBDEVICE=/dev/fb0
9. export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
10. #configure for qt
11. export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm
12. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
13. export PATH=$QTDIR/bin:$PATH
14. export QWS_MOUSE_PROTO=tslib:/dev/input/event0
4、将/etc/init.d/rcS中的如下行(倒数第三行)注释掉。即不启动默认界面!
1. #/bin/qtopia &
5、重新启动开发板后执行如下命令
1. ./MP7 -qw
小结:关于详解 QT MPlayer移植及交叉编译环境的内容介绍完了,希望本文对你有所帮助。更多内容请参考编辑推荐。
&来源:网络
小编工资已与此赏挂钩!一赏一分钱!求打赏↓ ↓ ↓
如果你喜欢本文章,请赐赏:
已赐赏的人
我的电子书}

我要回帖

更多关于 openssl arm交叉编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信