欢迎分享,转载请注明来源:内存溢出
采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。linux下的交叉编译环境重要包括以下几个部分:1.对目标系统的编译器gcc2.对目标系统的二进制工具binutils3.目标系统的标准c库glibc4.目标系统的linux内核头文件交叉编译环境的建立步骤一、下载源代码 下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。二、编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。三、配置linux内核头文件首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux四、第一次编译gcc首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。五、交叉编译glibc这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。六、第二次编译gcc运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。运行make install。到此为止整个交叉编译环境就完全生成了。几点注意事项第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。一、交叉编译opencv构造:下载:各个库的下载可以直接搜名字到官网下载几个关键解释:“--prefix=” 后边跟make install时的位置,本例中,libz在make install时将安装到/usr/arm-linux-gnueabihf中“--host=” 后边跟arm-linux表明使用的是ARM环境有configure的才能进行configure配置4)所有的makefile修改类似Libz的交叉编译第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared第二步:修改makefile,主要有下边几个,修改的时候通篇参照即可CC=arm-linux-gnueabihf-gccAR=arm-linux-gnueabihf-ar rcRANLIB=arm-linux-gnueabihf-ranlibSTRIP = arm-linux-gnueabihf-strip如果有ARCH的话,ARCH=ARM第三步:#sudo make#sudo make installLibjpeg的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc第二步:参考1)中方法修改makefile第三步:#sudo make#sudo make installLibpng的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc第二步:参考1)中方法修改makefile第三步:#sudo make#sudo make installYasm的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static第二步:修改makefile第三步:#sudo make#sudo make installLibx264的交叉编译第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf第二步:修改config.mak里的参数,因为makefile要调用config.mak,所以修改方法同makefile第三步:#sudo make#sudo make installLibxvid的交叉编译第一步:首先切换目录 #cd build/generic第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly第三步:#sudo make#sudo make installffmpeg的交叉编译第一步:./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf第二步:修改makefile文件第三步:#sudo make#sudo make install第四步:将ffmpeg加入pkg-config执行#sudo gedit /etc/bash.bashrc,在末尾加入export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfigexport PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/完毕后使用命令:#source /etc/bash.bashrc或者单独使用三个export,不过寿命只在一个终端中,终端关闭时就失效。几个关键解释:--extra-flags指向xvid的安装路径,--extra-ldflags指向x264的路径安装cmake-gui执行:#sudo apt-get install cmake-qt-guiOpencv的交叉编译第一步:修改opencv/platflrms/linux/目录下的arm-gnueabi.toolchain.cmake,将其所有删掉,写入:set( CMAKE_SYSTEM_NAME Linux )set( CMAKE_SYSTEM_PROCESSOR arm )set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )第二步:在opencv目录下新建build目录,进入build目录,执行命令:#cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../这时,要保证出现:第三步:使用cmake-gui打开CMakeCache.txt,去掉所有的无关项,修改CMAKE_INSTALL_PREFIX,来确定make install的目录第四步:#sudo make#sudo make install可能出现的错误:opencv编译不通过,出现skip之类的,说明ffmpeg没编译好,或者其编译好了,但是pkg-config没有设置好,一定要设置好其环境前边几步不通过的话,看看命令有没有少,或者有没有修改好makefile在arm上使用时,一种方法时直接将编译好的opencv目录下的lib文件拷贝到开发板对应的/lib目录下,其他或者拷贝到自己指定的目录,并设置好环境变量即可使用
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
LINUX中,查看文件内容及分页显示的办法有什么?
上一篇
2023-04-06
Linux下用awk获取某一行或某一列的查询结果
下一篇
2023-04-06
评论列表(0条)