本文介绍了交叉编译和交叉工具链的基本概念,以及其在嵌入式开发中的应用。同时,还详细描述了交叉工具链的重要组成部分,以及如何使用它们进行交叉编译。
该文介绍了交叉编译工具链的使用,包括arm-linux-gnueabi-gcc、arm-linux-gnueabihf-gcc、arm-none-eabi-gcc、arm-none-linux-gnueabi-gcc、arm-none-linux-gnueabihf-gcc、qoriq-elf-gcc等工具的使用方法。
前言 咱们知道android设备可以直接运行apk应用,或者使用dalvikvm指令运行dex文件中的程序, 但是这两者本质上使用的语言都是java或者smali, 如果需要执行C语言程序,需要借助N
对于没有做过嵌入式编程的人, 可能不太理解交叉编译的概念, 那么什么是交叉编译?它有什么作用?
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。
为什么在讲解音视频之前我需要先讲讲交叉编译呢?因为音视频开发将会涉及到很多三方库,特别是基于C语言的,在iOS和安卓开发中是没办法直接编译这些库,比如常见的MP3音频格式编码LAME,安卓常用的AAC音频格式编码FDK-AAC,视频编解码FFmpeg,等等,都是音视频开发的核心技术。
在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
Neuron 是一款开源的轻量级工业协议网关软件,支持数十种工业协议的一站式设备连接、数据接入、MQTT 协议转换,为工业设备赋予工业 4.0 时代关键的物联网连接能力。
The GNU Compiler Collection,通常简称GCC,是一套由GNU开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持C语言编译,还支持C++, Ada, Objective C等许多语言。另外GCC对硬件平台的支持,可以所无所不在,它不仅支持X86处理器架构, 还支持ARM, Motorola 68000, Motorola 8800, Atmel AVR, MIPS等处理器架构。
ARM可以算编译之坑的王中王,最常见的地狱之门,SRS目前的编译问题,大部分都是ARM的问题。 ARM主要有armv7和aarch64(armv8),SRS支持了aarch64的编译和docker镜像,支持了ARM的交叉编译,大概八成的ARM场景都能支持了吧。天堂之路又多了一条,希望大家日子好过点。 Why 为什么要支持ARM?因为现在八成的编译问题,都是大家在捣腾ARM时引起的。常见的误区: •在ARM服务器(RaspberryPi和鲲鹏等)上跑SRS使用交叉编译,扑街。正确姿势:ARM服务器上直接编译,
简单地说,就是程序的编译的环境和它的运行的环境不一样。即在一个平台上生成另一个平台上的可执行代码。交叉编译的概念主要和嵌入式开发有关。
注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构建生成的8.4以及yocto生成的9.3工具链,开发板系统默认安装的系统使用的是通过yocto编译构建,所以如果只想针对于文件系统应用做开发或者编译内核uboot等操作,建议只使用yocto的交叉编译工具链。
这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功。
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html
网上关于python的交叉编译的文章很多,但是关于python第三库的交叉编译的文章就比较少了,而且很多标题是第三方库的交叉编译,但是实际上用到的都是不需要交叉编译就能用的库,可参考性不强,最近关于python及其第三方库的交叉编译也踩了不少坑,记录一下!
R16交叉编译工具链 一. uboot 交叉编译工具链(tina&android): 指定文件- brandy/u-boot-2011.09/arch/arm/config.mk
上一篇博客《conan入门(八):交叉编译自己的conan包项目》中我们以jsonlib为例说明了如何将交叉编译自己封装成conan的模块。但是使用的DS-5 ARM的交叉编译器(arm-linux-gnueabihf)并不常见,也不方便读者实际操作。
上一篇博客《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》中我们以jsonlib为例说明了如何NDK交叉编译自己封装成conan的模块及定义profile简化编译的方式。
这里选择LuaJit在嵌入式Linux系统使用,LuaJit交叉编译也比较简单,没有第三方库的依赖,直接交叉编译源码即可。
首先我并不是搞什么嵌入式开发的,之所以会涉及到“交叉编译(ross-compilation)”是因为,最近在搞 OPenVINO 的 ARM 插件,试了很多次总是编译报错,于是采用了交叉编译的方式进行。如果你和我一样刚开始接触这个概念,那我就简单的把我所理解的交叉编译和大家说一下,如果有不对的地方,还请大佬们多多指教。
4.在Python-3.6.2目录下新建mylib文件夹,用于存放生成的可移植文件:
2021 年 11 月,我们决定评估 arm64 架构在 Uber 的可行性。我们的大多数服务是用 Go 或 Java 编写的,但我们的构建系统只能编译成 x86_64。现在,得益于开源合作,Uber 拥有了一个独立于系统的构建工具链,可以无缝地支持多种架构。我们使用这个工具链来引导 arm64 主机。本文将分享我们是如何着手去做这件事情的,以及我们早期的想法、遇到的问题、达成的一些成就和未来的方向。
本文介绍了如何将OpenCV库移植到ARM平台上,包括编译工具链、依赖库、配置方法以及运行时注意事项。
AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 64 位和 32 位寄存器。
6.4 交叉编译程序:以freetype为例 使用buildroot来给ARM板编译程序、编译库会很简单, 以后系统讲解buildroot时再使用buildroot。 现在我们还是手工交叉编译freetype,这种方法在编译、安装一些小程序时很有用。
因为树莓派本身就相当于一台电脑,所以我们可以在树莓派上编译内核或者应用程序,但是树莓派相较于台式机或者笔记本电脑,资源和速度还是有区别的,所以就需要建立交叉编译环境在台式机或者笔记本上安装交叉编译工具链,如果在树莓派本机上编译一个内核得几个小时才能编译完。所以安装交叉编译环境相当重要,是我们后面学习开发的一切保证。假设你已经安装好虚拟机和Ubuntu系统,当然也可以用其他版本的Linux系统。树莓派官方推荐交叉编译用乌班图,所以我们安装了乌班图的16.04长期支持版本,发布于16年四月。 虚拟机Virtul
交叉编译器是在PC上运行的编译器,但是编译后得到的二进制程序却不能在PC 上运行,而只能在开发板上运行。交叉编译器命名方式一般遵循“处理器-系统-gcc”这样的 规则,一般通过名称便可以知道交叉编译器的功能。
等待软件自动安装安装完成以后使用如下 VI 命令打开/etc/vsftpd.conf,命令如下:
程序交叉编译后就可以在各操作系统执行,非Java或Python依赖虚拟机,Go编译后不依赖虚拟机。
记录一下自己交叉编译QT的过程,目前来说再体验了初次编译镜像之后,编译这个QT还是算比较快捷的,因为该有的库都安装完成了。
① 视频数据回顾 : 手机使用 Camera 采集 NV21 格式的图像数据 , x264 编码库将图像数据编码成 H.264 格式的视频数据 ;
从 arm-linux-gnu-gcc -v 中看到 sysroot目录 /usr/arm-linux-gnu/sys-root/ 为空。 从 yum search 中,也没找到对应的包。看来只能手工去下载编译用的head文件和库文件。
今天给大家介绍的是在一个嵌入式Linux板子上运行Hello World,软硬件入门学习的经典操作。依稀记得两年前,我第一次在飞思卡尔(现NXP)I.MX6上运行出Hello World的那种喜悦之情。希望这篇文章能对你有所帮助。
我们交叉编译Linux的时候可能需要添加新的头文件,这个头文件放在哪里。编译应用程序和内核程序不太一样,分别说。
① H.264 标准 : H.264 是视频编码标准 , 由 ITU 和 MPEG 制订 ;
如果你有定义himix200的工具链文件也可以使用CMAKE_TOOLCHAIN_FILE指定工具链文件来完成交叉编译 参见 https://gitee.com/l0km/faceapi/blob/master/faceapi-rpc-cpp/dependencies/cmake/arm-himix200-linux.toolchain.cmake
Android Studio 2.2 及以后的版本默认使用CMake进行 NDK 编译, 其中最吸引人的地方是,在开发NDK程序时可以进行联机调试,这真是大在的方便了开发者开发NDK程序的效率了。 那么使用CMake编译NDK程序是否与我们之前介绍的使用ndk-build编译有很大的不同呢?下面我们就来一窥它的原理。
golang最让我心动的,就是交叉编译比较方便,android基本上都是arm处理器,交叉编译过arm的都知道,工具链不一样,往往问题比较麻烦,其中最大的问题在于动态库的版本问题(c语言的可以编译用--static解决这个问题)。 而golang交叉编译arm下面的程序,几乎个个平台,都很通用。方法则是额外设置GOARCH(也有个GOOS,这里不讨论)就可以了。 毕竟golang和android都是google的儿子,android下不能允许golang的程序,不太像话!! 环境准备 1、一台root的手机
Linux平台上有许多开源的嵌入式linux系统构建框架(框架的意思就是工具),这些框架极大的方便了开发者进行嵌入式系统的定制化构建,目前比较常见的有OpenWrt, Buildroot, Yocto,等等。其中Buildroot功能强大,使用简单,而且采用了类似于linux kernel的配置和编译框架,所以受到广大嵌入式开发人员的欢迎。
2 . 共享动态库编译参数 : 编译动态库需要添加 “-fPIC” 和 “-shared” 两个参数 ;
宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标处理器(S3C2440@ARM920T)上跑,这就叫交叉编译,编译器叫做交叉编译器。
上一篇博客《conan入门(七):将自己的项目生成conan包》中我们以jsonlib为例说明了如何将自己的模块封装成conan提供给第三方使用。
1 . Android 版本目录 : platforms 中存储了各个 Android 版本编译时需要的动态库与静态库资源 , 如 android-29 中就是该版本对应的本地库资源 ;
因为google在 NDK R19C中把GCC删除了。本来想着能不能配置出用clang编译ffmpeg,可是折腾了半天还是不行,于是还是用gcc吧。。支持gcc版本的最高的ndk是 NDK R17C,需要下载ndk r17c的开发包。另外最新的x264和ffmpeg代码需要最低 android-23的编译。也就是最低android6.0。因为有个 cabs()函数,只有android6.0才有。基本注意的就这两个方面。1,需要ndk r17c. 2,最低需要定义android-23。 下面是编译shell. 系统是centos7.0 第一个shell脚本是生成交叉编译toolchain
FFmpeg是一套用于录制、转换和流化音视频的完整的跨平台解决方案,它的强大之处不用过多描述,本文主要介绍如何编译出so文件和在Android Studio工程中的引入
最近在学习音视频开发相关的内容,故硬件选型是非常重要的,加上芯片缺货,为了保证未来芯片供应链正常,结合预测趋势以及对芯片行业相关的定量分析 ,最终我选择了瑞芯微刚推出不久的芯片:RV1126_RV1109系列,为了高效学习,我将瑞芯微平台SDK里提供的docs目录下的文档做了分类整理和汇总,以便后期在工作中用到相应的知识可以很快的查阅到相关的资料高效完成调试和开发:
Qt 是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代码不用修改,放在Linux环境下的Qt开发环境,重新编译,就可以生成可以在Linux环境下运行的串口助手,当然,Qt支持的环境有很多。不同平台下的移植,只需要修改很小一部分或者不用修改就可以直接运行。
网上其实已经有很多的关于FFmpeg so库编译的分享,但是大部分都是直接把配置文件的内容贴出来。我想大部分取搜索 「如何编译FFmpeg so库」的人,对交叉编译这个东东都是比较陌生的。
在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。
领取专属 10元无门槛券
手把手带您无忧上云