《嵌入式Linux开发实用教程》——1.3 arm-linux交叉编译链

简介:

本节书摘来自异步社区《嵌入式Linux开发实用教程》一书中的第1章,第1.3节,作者 朱兆祺,李强,袁晋蓉,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 arm-linux交叉编译链

平常我们做的编译叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。相对而言的交叉编译指的是在一个平台上生成另一个平台的可执行代码。

常见的交叉编译有以下3种。

在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,编译出针对ARM CPU的可执行代码。

在Linux PC上,利用arm-linux-gcc编译器,编译出针对Linux ARM平台的可执行代码。

在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,编译出针对ARM CPU的可执行代码。

1.3.1 arm-linux交叉编译工具链的制作方法

由于一般嵌入式开发系统的存储大小是有限的,通常都要在性能优越的PC上建立一个用于目标机的交叉编译工具链,用该交叉编译工具链在PC上编译目标机上要运行的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序。要生成在目标机上运行的程序,必须要用交叉编译工具链完成。交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。有时出于减小libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。建立交叉编译工具链是一个相当复杂的过程,如果不想自己经历复杂繁琐的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载,但就以学习为目的来说,读者有必要学习自己制作一个交叉编译工具链。本节通过具体的实例讲述基于ARM的嵌入式Linux交叉编译工具链的制作过程。

制作arm-linux交叉编译工具链的一般通过crosstool工具或者crosstool_NG,前者使用方便,但是制作会受到一些限制,使用crosstool最多只能编译gcc 4.1.1、glibc 2.x的版本。crosstool-NG是新的用来建立交叉工具链的工具,它是crosstool的替换者,crosstool_NG有更好的定制性,并且一直保持着更新,对新版本的编译工具链的支持比较好,当然也带来了一些麻烦,它并不是下载下来就可以使用的,必须先配置安装。我们这里选用crosstool_NG来制作我们的编译链。

1.安装crosstool_NG

在crosstool_NG官网上下载最新版本。

zhuzhaoqi@zhuzhaoqi-desktop:~$ mkdir arm-linux-tools
zhuzhaoqi@zhuzhaoqi-desktop:~$ cd arm-linux-tools/
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ ls

获取源码操作命令:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ wget http://crosstool-ng.org/ download/ crosstool-ng/crosstool-ng-1.18.0.tar.bz2
--2013-03-26 21:34:34-- http://crosstool-ng.org/download/crosstool-ng/crosstool-ng- 1.18.0.tar.bz2
正在解析主机 crosstool-ng.org... 140.211.15.107
正在连接 crosstool-ng.org|140.211.15.107|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 1884219 (1.8M) [application/x-bzip]
正在保存至: “crosstool-ng-1.18.0.tar.bz2”

100%[======================================>] 1,884,219  223K/s  花时 8.8s

下载源码成功之后解压源码:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ tar jxvf crosstool-ng-1.18.0.tar.bz2
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ ls
crosstool-ng-1.18.0 crosstool-ng-1.18.0.tar.bz2

考虑到后续将要使用到的各种目录,在这里先建立好后续所需目录。

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ mkdir crosstool-build crosstool-install src 
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ ls
crosstool-build  crosstool-ng-1.18.0     src
crosstool-install crosstool-ng-1.18.0.tar.bz2

由于Ubuntu操作系统的很多开发软件都没有安装,因此要先安装一些制作交叉编译链必备的软件。在Ubuntu下安装软件的命令为:sudo apt-get install*

笔者建议arm-linux交叉编译工具链的制作最好在CentOS系统中完成,因为CentOS系统自带较为完善的开发软件,对于初学者不会造成不必要的麻烦。
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools$ sudo apt-get install sed bash cut dpkg-dev patch texinfom4 libtool statwebsvn tar gzip bzip2 lzmabison flex texinfo automake libtool patchcvs cvsd gawk–y

配置整个工程并且进行依赖检测:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ./configure --prefix /home/zhuzhaoqi/arm-linux-tools/crosstool-install

在安装过程中,提示如下错误:

……
checking how to run the C preprocessor... gcc -E
checking for ranlib... ranlib
checking for objcopy... objcopy
checking for absolute path to objcopy... /usr/bin/objcopy
checking for objdump... objdump
checking for absolute path to objdump... /usr/bin/objdump
checking for readelf... readelf
checking for absolute path to readelf... /usr/bin/readelf
checking for bison... no
configure: error: missing required tool: bison

输出错误提示缺失bison这个软件,安装:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo apt-get install bison

安装完成之后,再次进行配置:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ./configure --prefix /home/zhuzhaoqi/arm-linux-tools/crosstool-install

又一次输出错误:

……
checking for bison... bison
checking for flex... no
configure: error: missing required tool: flex

提示缺失flex这个软件,进行安装:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo apt-get install flex

安装完成之后,再一次进行配置:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ./configure --prefix /home/zhuzhaoqi/arm-linux-tools/crosstool-install

又一次提示错误:

checking for bison... bison
checking for flex... flex
checking for gperf... no
configure: error: missing required tool: gperf

提示缺失gperf这个软件,进行安装:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo apt-get install gperf

安装完成之后,再一次进行配置:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ./configure --prefix /home/zhuzhaoqi/arm-linux-tools/crosstool-install

再一次提示出错:

……
checking for bison... bison
checking for flex... flex
checking for gperf... gperf
checking for makeinfo... no
configure: error: missing required tool: makeinfo

缺失makeinfo软件,进行安装,如果安装的是makeinfo,则会有如下提示:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo apt-get install makeinfo
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
E: 无法找到软件包makeinfo

此时应该安装texinfo软件:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo apt-get install makeinfo

安装完成之后,再一次进行配置:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ./configure --prefix /home/zhuzhaoqi/arm-linux-tools/crosstool-install

这次的配置成功,如果读者操作还会报错的话,依照上面方法找出其根源进行改正即可。成功配置之后会自动创建我们需要的Makefile文件。

checking for library containing initscr... -lncursesw
configure: creating ./config.status
config.status: creating Makefile
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ ls
bootstrap   configure   ct-ng.comp LICENSES   patches steps.mk
config     configure.ac ct-ng.in  licenses.d  README  TODO
config.log   contrib    docs    **Makefile  ** samples
config.status COPYING    kconfig   Makefile.in scripts

执行Makefile文件:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ make
 SED  'ct-ng'
 SED  'scripts/crosstool-NG.sh'
 SED  'scripts/saveSample.sh'
 SED  'scripts/showTuple.sh'
 GEN  'config/configure.in'
 GEN  'paths.mk'
 GEN  'paths.sh'
 DEP  'nconf.gui.dep'
 DEP  'nconf.dep'
 DEP  'lxdialog/yesno.dep'
 DEP  'lxdialog/util.dep'
 DEP  'lxdialog/textbox.dep'
 DEP  'lxdialog/menubox.dep'
 DEP  'lxdialog/inputbox.dep'
 DEP  'lxdialog/checklist.dep'
 DEP  'mconf.dep'
 DEP  'conf.dep'
 BISON 'zconf.tab.c'
 GPERF 'zconf.hash.c'
 LEX  'lex.zconf.c'
 DEP  'zconf.tab.dep'
 CC   'zconf.tab.o'
 CC   'conf.o'
 LD   'conf'
 CC   'lxdialog/checklist.o'
 CC   'lxdialog/inputbox.o'
 CC   'lxdialog/menubox.o'
 CC   'lxdialog/textbox.o'
 CC   'lxdialog/util.o'
 CC   'lxdialog/yesno.o'
 CC   'mconf.o'
 LD   'mconf'
 CC   'nconf.o'
 CC   'nconf.gui.o'
 LD   'nconf'
 SED  'docs/ct-ng.1'
 GZIP  'docs/ct-ng.1.gz'

编译成功之后进行安装:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ make install

成功安装之后,可以看到已经安装到指定的目录下,最后输出这么一句话:

……
For auto-completion, do not forget to install 'ct-ng.comp' into
your bash completion directory (usually /etc/bash_completion.d)

这是在提醒我们不要忘记了配置环境变量,多么人性化的提示。接下来配置环境变量。

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0$ sudo echo "PATH=$PATH:/home/zhuzhaoqi/arm-linux-tools/crosstool-install/bin" >> ~/.bashrc

执行使其生效:

zhuzhaoqi@zhuzhaoqi-desktop:~$ source /home/zhuzhaoqi/.bashrc

使用ct-ng –v命令查看安装结果:

zhuzhaoqi@zhuzhaoqi-desktop:~$ ct-ng -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

这个程序创建为 i486-pc-linux-gnu

OK!ct-ng环境变量添加成功,也就意味着整个crosstool-NG安装成功。

2.配置交叉编译链

现在需要去做的就是配置要编译的交叉编译工具链,在crosstool-NG中有很多已经做好的默认配置(位于crosstool-ng- X.Y.Z(crosstool-ng-1.18.0)/samples目录下),这里只需要进行修改就好了。对于编译器组件部分的版本最好不要修改,因为那个应该是经过测试后的最高版本了,但内核版本可以修改。

可以看到samples目录下的一些默认配置,如下所示:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0/samples$ ls
alphaev56-unknown-linux-gnu      mips64el-n64-linux-uclibc
alphaev67-unknown-linux-gnu      mips-ar2315-linux-gnu
arm-bare_newlib_cortex_m3_nommu-eabi mipsel-sde-elf
arm-cortex_a15-linux-gnueabi     mipsel-unknown-linux-gnu
arm-cortex_a8-linux-gnueabi      mips-malta-linux-gnu
arm-davinci-linux-gnueabi       mips-unknown-elf
armeb-unknown-eabi          mips-unknown-linux-uclibc
armeb-unknown-linux-gnueabi      powerpc-405-linux-gnu
armeb-unknown-linux-uclibcgnueabi   powerpc64-unknown-linux-gnu
arm-unknown-eabi           powerpc-860-linux-gnu
arm-unknown-linux-gnueabi       powerpc-e300c3-linux-gnu
arm-unknown-linux-uclibcgnueabi    powerpc-e500v2-linux-gnuspe
armv6-rpi-linux-gnueabi        powerpc-unknown-linux-gnu
avr32-unknown-none          powerpc-unknown-linux-uclibc
bfin-unknown-linux-uclibc  powerpc-unknown_nofpu-linux-gnu
i586-geode-linux-uclibc        s390-ibm-linux-gnu
i586-mingw32msvc,i686-none-linux-gnu s390x-ibm-linux-gnu
i686-nptl-linux-gnu          samples.mk
i686-unknown-mingw32         sh4-unknown-linux-gnu
m68k-unknown-elf           x86_64-unknown-linux-gnu
m68k-unknown-uclinux-uclibc      x86_64-unknown-linux-uclibc
mips64el-n32-linux-uclibc       x86_64-unknown-mingw32

里面有很多默认配置,有arm、avr32、mips、powerpc等硬件平台,而arm平台有如下几个:

arm-unknown-eabi是基于裸板,也就是无操作系统。
arm-unknown-linux-gnueabi 是基于Linux。
arm-unknown-linux-uclibcgnueabi 这个应该能看出来了,是为uclinux用的。
arm-cortex_a15-linux-gnueabi可从名字上看是为cortex-a15用的。
arm-cortex_a8-linux-gnueabi 这个也可从名字上看是为cortex-a8用的。
arm-xxx$&#*&还有几个,这些暂且不去理会。

因为是制作arm-linux交叉编译链,所以选择arm-unknown-linux-gnueabi进行配置。将arm-unknown-linux-gnueabi文件夹复制到crosstool-build/目录下:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-ng-1.18.0/samples$ cp -r arm-unknown-linux-gnueabi/ ../../crosstool-build/
zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-build$ ls
arm-unknown-linux-gnueabi

将默认配置文件拷贝到工作目录(crosstool-build)下并改名为.config,因为默认的配置文件为.config,完成之后可以加载需要的配置。

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-build$ cp arm-unknown-linux-gnueabi/crosstool.config .config

执行ct-ng menuconfig进入配置界面进行配置:

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-build$ ct-ng menuconfig
 LN  config
 MKDIR config.gen
 IN  config.gen/arch.in
 IN  config.gen/kernel.in
 IN  config.gen/cc.in
 IN  config.gen/binutils.in
 IN  config.gen/libc.in
 IN  config.gen/debug.in
 CONF config/config.in
#
# configuration saved
#

进入配置界面,如图1.1所示。


screenshot

下面设置源码目录和安装目录,这需要读者依据自己实际设定的情况来进行配置。

第一步,设定源码包路径和交叉编译器的安装路径。

Paths and misc options --->
  (/home/zhuzhaoqi/arm-linux-tools/src) Local tarballs directory 保存源码包路径
   (/home/zhuzhaoqi/arm-linux-tools/tools) Prefix directory交叉编译器的安装路径

配置之后的结构如图1.2所示。


screenshot

第二步,修改交叉编译器针对的构架。

因为本次是针对OK6410制作编译链,那就依据s3c6410的硬件特性来制作。

Target options是重点要修改的地方(以下配置均是基于已拷贝过来的配置)。

Target Architecture(arm) 这个不用管,已经是arm了。
Default instruction set mode (arm) 这个也不管,也已经是arm了。

Architecture level()需要进行修改。

通过查找资料,这个应该是指令集的架构,对于S3C6410 ARM1176JZF-S核心使用的是armv6zk架构,就选armv6zk。那么,具体都支持哪些架构呢?可以用man gcc来查询,搜索arm,再搜索-march=就可以找到本gcc支持的处理器核心列表了:

-march=name
This specifies the name of the target ARM architecture. GCC uses
this name to determine what kind of instructions it can emit when
generating assembly code. This option can be used in conjunction
with or instead of the -mcpu= option. Permissible names are:
armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
armv7-a, armv7-r, armv7-m, iwmmxt, iwmmxt2, ep9312.

Emit assembly for CPU()需要进行修改。

这个对应的是CPU的核心类型。同样,也和上面的选项一样,对应一个GCC选项。GCC的描述如下。

-mcpu=name
This specifies the name of the target ARM processor. GCC uses this
name to determine what kind of instructions it can emit when
generating assembly code. Permissible names are: arm2, arm250,
arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d,
arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c,
arm7100, arm720, arm7500, arm7500fe, arm7tdmi,arm7tdmi-s, arm710t,
arm720t, arm740t, strongarm, strongarm110, strongarm1100,
strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t,
arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi,
arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e,
arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1176jz-s, arm1176jzf-s, cortex-a8, cortex-a9, cortex-r4,
cortex-r4f, cortex-m3, cortex-m1, xscale, iwmmxt, iwmmxt2, ep9312.

这样看简单一些了,如果是S3C2410/S3C2440就选arm920t,如果是s3c6410就选arm1176jzf-s。

Tune for CPU() ,对应的GCC描述如下:

-mtune=name
This option is very similar to the -mcpu= option, except that
instead of specifying the actual target processor type, and hence
restricting which instructions can be used, it specifies that GCC
should tune the performance of the code as if the target were of
the type specified in this option, but still choosing the
instructions that it will generate based on the cpu specified by a
-mcpu= option. For some ARM implementations better performance can
be obtained by using this option.

意思是说这个选项和-mcpu 很类似,这里是指真实的CPU型号。不过有读者是编译2440的工具链,这里选择的是arm9tdmi,如果不是,那就空着。这里的作用是如果arm920t处理不了,就用arm9tdmi的方式来编译。

与Floating point()浮点相关的选项s3c6410 有硬件VFP,所以这里选的是hardware FPU。这个是给有硬浮点的处理器强行选软浮点用的。

Use specific FPU()跟浮点有关,这里不选任何内容。至于怎么组合,读者可以跟据自己的CPU的实际情况进行相应的配置。

C compiler --->
   ***Additional supported languages: *** 
   [ ] Java //不用这个编译器来编译java

当然,如果读者需要用它来编译java那就不用去除。

其他选项采用默认设置存盘然后退出,这样就配置完了。

zhuzhaoqi@zhuzhaoqi-desktop:~/arm-linux-tools/crosstool-build$ ct-ng build

开始编译,此编译过程需要花费大约两个小时,最终编译出arm-linux-gcc-4.4.1编译链。

1.3.2 交叉编译链在宿主机上的安装

这里要安装的交叉编译链版本是arm-linux-gcc 4.4.1(交叉编译链的版本很多,读者可以自行安装版本更高的编译链)。采用的Linux系统环境是Ubuntu10.04.4。具体的操作步骤如下。

1.在/usr/local下面创建一个文件夹:mkdir arm,将arm-linux-gcc 4.4.1放在arm文件夹里面。然后解压缩,命令根据压缩包的后缀不同而不同。

2.添加环境变量,vim /etc/profile。

3.在最后一行添加:export PATH=$PATH:/usr/local/arm/4.4.1/bin。

4.退出执行命令:source /etc/profile。使其生效。

5.检测安装是否成功:arm-linux-gcc -v ;如果成功,输出最后一行则会提示:gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)。描述如下:

zhuzhaoqi@zhuzhaoqi-desktop:~/u-boot/Makefile/shellfunction$ arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/2009q3-respin-linux-lite/src/gcc-4.4/configure --build= i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind- tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local- statics}}}' --enable-languages=c,c++ --enable-shared --disable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q3-67' --with-bugurl=https: //support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with- sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/ 2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/ 2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none- linux-gnueabi-i686-pc-linux-gnu/usr --with-ppl=/scratch/julian/2009q3-respin-linux-lite/ obj/ host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static- libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/julian/2009q3-respin- linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/ julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin --with-build-time- tools=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

笔者建议最好不要在root用户下进行安装,否则使用交叉编译链可能会存在权限限制。

相关文章
|
9天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
32 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
54 3
|
14天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
22天前
|
Linux 计算机视觉
Linux交叉编译opencv并移植ARM端
通过以上步骤,你可以在Linux上交叉编译OpenCV,并将生成的库文件和头文件移植到ARM平台上,从而在ARM上使用OpenCV。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
45 0
|
25天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
43 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
27天前
|
Linux API C语言
lua 如何在嵌入式Linux中与c语言结合
lua 如何在嵌入式Linux中与c语言结合
8 1
|
28天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
8 1
|
28天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
23 1
|
28天前
|
Linux 编译器 网络安全
嵌入式Linux移植dropbear
嵌入式Linux移植dropbear
21 3
|
28天前
|
存储 Ubuntu Linux
制作一个嵌入式Linux的应用程序升级文件
制作一个嵌入式Linux的应用程序升级文件
12 2