Linux 交叉编译工具链格式 sqlite3编译示例

news2024/10/5 13:52:15

1、交叉编译工具链

1.1 定义

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发工具集,它允许开发者在一个平台上(例如高性能的PC或服务器)编译生成另一个平台(例如嵌入式系统或不同的操作系统和硬件架构)上运行的代码。在Linux系统中,交叉编译工具链主要用于嵌入式系统的开发,因为嵌入式系统通常资源有限,难以直接在其上进行编译操作。

1.2 格式

通常其格式定义如下:

arch[-vendor][-os][-(gnu)eabi][-gcc]
  • arch:目标平台的体系架构,如armx86等。
  • vendor:工具链的供应商或自定义标识符,如果没有特定供应商,通常用none代替。
  • os:目标操作系统,如linuxandroid等。如果没有特定操作系统支持,也用none代替。
  • (gnu)eabi:嵌入式应用二进制接口(Embedded Application Binary Interface),它指定了文件格式、数据类型、寄存器使用、堆栈组织优化和在一个嵌入式软件中的参数的标准约定。例如,gnueabihf适用于ARM架构的硬浮点ABI。
  • gcc:表示这是一个GCC(GNU Compiler Collection)系列的编译器

1.3 工具示例

  • arm-linux-gnueabihf-gcc
    • 架构:ARM
    • 操作系统:Linux
    • ABI:GNU EABI with Hard Float (hf)
    • 描述:用于在Linux下为ARM架构编译带有硬浮点支持的程序。
  • arm-none-linux-gnueabi-gcc
    • 架构:ARM
    • 供应商:none(表示没有特定的供应商或定制)
    • 操作系统:Linux
    • ABI:GNU EABI
    • 描述:用于在Linux下为ARM架构编译没有特定供应商标识的程序,使用标准的GNU EABI。
  • aarch64-linux-gnu-gcc
    • 架构:ARM64(也称为AArch64)
    • 操作系统:Linux
    • ABI:GNU
    • 描述:用于在Linux下为ARM64架构编译程序。
  • mips-linux-gnu-gcc
    • 架构:MIPS
    • 操作系统:Linux
    • ABI:GNU
    • 描述:用于在Linux下为MIPS架构编译程序。

关于gnugnueabi 和 gnueabihf :

  • gnugnueabi 和 gnueabihf 这些后缀在工具链命名中用于描述对EABI的不同支持级别。
  • gnu 通常是一个更通用的标识,而 gnueabi 表明对EABI的支持,但不直接指明浮点运算的形式。
  • gnueabihf 则明确表示支持硬件浮点运算。
  • 对于只包含 gnu 或 gnueabi 的工具链命名,需要通过查阅文档或参考编译器选项来确定对浮点运算的具体支持情况。

2、linux下软件的交叉编译

2.1 configure作用

configure脚本将根据当前主机系统的类型和特性来检测系统环境,包括编译器、链接器、标准库、头文件等信息,然后生成一个包含编译选项和其他配置信息的Makefile文件。这个Makefile文件将根据检测到的环境配置编译过程,确保软件能够正确编译并在目标平台上运行。

在交叉编译情况下,configure脚本还会根据用户指定的交叉编译工具链来设置正确的编译器、链接器等工具,以确保生成的可执行文件能够在目标平台上正确运行。

2.2 configure常用选项

  • --build=BUILD
    • 指定编译所用的机器的平台。通常,如果不特别指定,其默认值将等同于 --host 选项的值。
  • --host=HOST
    • 指定编译出的代码将要运行的目标平台。这是交叉编译中最重要的选项之一。HOST 通常使用目标三元组(target triple)表示,包含 CPU 架构、供应商、操作系统和 ABI。例如,x86_64-unknown-linux-gnu 表示一个 CPU 架构为 x86_64、操作系统为 Linux、ABI 为 GNU 的系统。
  • --target=TARGET
    • 指定编译出来的工具链(如编译器、链接器等)生成的代码将要运行的目标平台。这个选项在构建交叉编译环境时较为常用,尤其是在编译 gcc、ld 等工具链时。通常情况下,正常编译和交叉编译都不会用到这个选项。
  • --prefix=PREFIX
    • 指定软件安装的位置。这在交叉编译时尤为重要,因为它决定了编译出的软件将安装到哪个目录。
  • --disable-FEATURE
    • 禁用某些特性。一些软件包提供了可选的编译时配置,如使用 Kerberos 认证系统或实验性的编译器优化。如果默认是提供这些特性,可以使用此选项来禁用它们。
  • --enable-FEATURE[=ARG]
    • 启用某些默认被禁止的特性,并可以为特性指定可选的参数。例如,启用特定的缓冲区大小或特定功能的启用/禁用。
  • --srcdir=DIR
    • 告诉 configure 源码的位置。通常不需要特别指定,因为 configure 脚本通常和源码文件在同一个目录下。
  • --program-prefix=PREFIX 和 --program-suffix=SUFFIX
    • 分别指定将被加到所安装程序的名字上的前缀和后缀。这有助于区分同一台机器上安装的不同版本或不同构建的程序。
  • --program-transform-name=PROGRAM
    • 使用 sed 脚本来变换安装的程序名。
  • LDFLAGS="-L/path/to/libs" 和 CPPFLAGS="-I/path/to/includes"
    • 分别用于指定链接器和预处理器使用的额外库和头文件路径。这在交叉编译时尤其有用,因为需要指定目标平台的库和头文件路径。

3、交叉编译sqlite3

3.1 获取源码

从官网获取:SQLite Download Page,直接下载放入虚拟机即可,也可以在资源处点击右键获取下载链接然后通过wget命令下载:

wget https://www.sqlite.org/2024/sqlite-autoconf-3460000.tar.gz

下载完成:

使用tar -xzf sqlite-autoconf-3460000.tar.gz解压:

3.2 配置

进入解压后的目录,创建一个output文件夹,进行如下配置:

./configure --host=aarch64-linux-gnu --prefix=/home/aka_li/linux/mysqlite3/sqlite-autoconf-3460000/output

其中aarch64-linux-gnu要修改为你的目标主机,/home/aka_li/linux/mysqlite3/sqlite-autoconf-3460000/output为你要输出的目录。

然后顺序执行make和make install,最终编译文件输出到前面指定的output文件夹中:

3.3 编程

参考之前文章中的数据库编程代码:Linux应用 sqlite3编程编译可执行程序,其中-L指定动态库位置,-I(大写i)指定头文件目录,-l(小写L)指定动态库名称:

aarch64-linux-gnu-gcc sqlite3.c -L/home/aka_li/linux/mysqlite3/sqlite-autoconf-3460000/output/lib/ -I/home/aka_li/linux/mysqlite3/sqlite-autoconf-3460000/output/include/ -lsqlite3 -o sqlitetest

进入output文件夹打包,命令如下:

tar -czvf sqlitefile.tar.gz .

打包完拷贝至目标板中,解压后将lib目录下的库拷贝到目标板的/lib目录下,将编译完成的应用程序也拷贝至目标板中,:

执行可执行程序,可以正常运行:

4、总结

本文讲解了linux下交叉编译工具链的格式,阐述了交叉编译软件时configure的配置过程,编写了sqlite3的交叉编译示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1869566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教程】DPW 325T FPGA板卡程序下载与固化全攻略

到底什么是固化??? 在开发板领域,"固化"通常指的是将软件或操作系统的镜像文件烧录(Flash)到开发板的存储介质上,使其成为开发板启动时加载的系统。这个过程可以确保开发板在启动时能…

2024年8月 PMP认证考试 7月9日正式开始报考

尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2024年第三期PMI认证考试定于8月31日举办。 7月9日正式开始中文报考,在此之前需要完成英文资料注册,如果您想参加8月考试,还有最后10天报名即截止…

鸿蒙智慧监控解决方案:由Al视觉盒、网络摄像头、管理后台、手机端、NVR等组成

方案架构 整体技术架构由Al视觉盒、网络摄像头、管理后台、手机端、NVR等组成,提供从前端智能监控到后端数据处理的完整闭环。 方案价值 01/节约人力成本 ①AI算法对监控内容进行实时的智能检测,准确率高,有效减少错漏,无需多个…

免费可视化工具为何成为数据分析新宠?

免费可视化工具为何越来越受欢迎?在当今数据驱动的时代,数据分析和展示已成为各行各业不可或缺的核心能力。然而,传统的数据处理和可视化工具往往价格昂贵,且使用门槛较高,这为许多中小企业和个人用户带来了不小的困扰…

java 简单零钱通

目标 面向过程版 代码 package new_pluse;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class change_common{public static void main(String arg[]){//定义相关变量Scanner scanner new Scanner(System.in);String key&qu…

智能巡检平台建设,减轻一线巡检员负担

智能巡检系统平台的建设,通过技术手段减轻一线巡检员的工作负担,提高巡检工作的效率和质量。以下是该平台建设的几个关键点和效果归纳: 一、自动化规划与分配 智能巡检系统能够自动规划巡检路线、分配巡检任务,从而减少了巡检员在…

@城规人快来抄作业!转GIS开发月薪12000+

从性价比极低的时薪,到相对稳定的月薪过万,我做对了哪些事情? 今天分享的是城乡规划专业的L拿到GIS开发高薪offer的故事。 初识新中地 该同学是城乡规划专业本科,下面称他为L同学。 L同学是今年夏天在网络上了解了GIS开发和新…

小程序发布必须进行软件测试吗?测试内容有哪些?

在如今移动互联网时代,小程序已成为许多企业广泛采用的一种营销手段,然而,发布小程序之前进行充分的软件测试是至关重要的,因为它不仅可以确保小程序的质量,还可以避免潜在的风险和损失。 在进行小程序发布前进行软件…

ELK日志集成

https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef

SKYDROID-C12—— 让美景近在眼前

C12是一款小型高清双光吊舱,使用新一代影像芯片,搭配高清无畸变摄像头,有效像素达到500万,拥有强悍的2K视频录制和拍照能力,支持数字变倍,随时随地捕捉清晰的图像,让远处美景近在眼前。

UI(三)布局

文章目录 1、Colum和Row——垂直方向容器和水平方向容器2、ColumnSplit和RowSplit——子组件之间插入一条分割线3、Flex——弹性布局子组件的容器4、Grid和GridItem——网格容器和网格容器单元格5、GridRow和GridCol——栅格容器组件和栅格子组件6、List、ListItem、ListItemGr…

“一站式企业服务平台”全景解析

在当今市场竞争日益激烈、商业环境瞬息万变的大经济环境下,企业在经营过程中常常面临政策不知道摸不清、资源获取困难、融资渠道狭窄、市场开拓不畅、政务办理繁琐等诸多问题,为了解决这些问题,帮扶企业发展,同时优化区域营商环境…

JavaWeb系列三: JavaScript学习 下

文章目录 js数组定义方式数组遍历 js函数函数入门函数使用方式使用方式一使用方式二 函数注意事项函数练习题 定义对象使用object定义使用{}定义 事件onload事件onclick事件失去焦点事件内容发生改变事件表单提交事件静态注册动态注册表单作业 dom对象文档对象模型document对象…

Oracle ACE夜话--和首席-总监一起跟大家谈一谈分布式数据库发展

前言 在昨日的Oracle ACE夜话中,和薛首席、尹总监一起聊了下当前分布式数据库的内容,现将分享内容又进行了相应整理,分享给大家,也希望大家多多指正。 一、自我介绍 尚雷,公众号【尚雷的驿站】,PG ACE&a…

矩阵新玩法,云微客AI矩阵系统开启新营销大门

在激烈的市场竞争中,商家企业们都在追求更加高效的营销方式,在如今流量至上的时代,短视频凭借其魅力,成为了众多企业吸引流量、获客引流的核心营销途径。而想要挤进短视频流量圈的你,是否经常听到矩阵这个词呢&#xf…

cad怎么导出为图片?分享四种导出方法

cad怎么导出为图片?在工程设计、建筑设计、机械设计等领域,CAD图纸的编辑和分享是一项日常工作。然而,如何将CAD图纸高效、准确地导出为图片格式,一直是设计师们关注的焦点。今天,就为大家推荐四款强大的CAD导出图片软…

Java web应用性能分析之【prometheus监控指标体系】

Java web应用性能分析之【系统监控工具prometheus】_javaweb服务器性能监控工具-CSDN博客 Java web应用性能分析之【prometheusGrafana监控springboot服务和服务器监控】_grafana 导入 prometheus-CSDN博客 因为篇幅原因,前面没有详细说明Prometheus的监控指标&…

clonezilla(再生龙)克隆物理机linux系统,然后再去另一台电脑安装

前言: 总共需要2个u盘,一个装再生龙系统,一个是使用再生龙把硬盘备份到另一个盘里面,恢复的时候,先使用再生龙引导,然后再插上盘进行复制 1.制作启动u盘 1.1下载再生龙Clonezilla 下載 1.2下载UltraISO(https://cn.ultraiso.net/uiso9_cn.exe) 1.3 打开UltraISO,选择co…

鸿蒙Harmony开发实战案例:使用OpenGL绘制3D图形

XComponent控件常用于相机预览流的显示和游戏画面的绘制,在OpenHarmony上,可以配合Native Window创建OpenGL开发环境,并最终将OpenGL绘制的图形显示到XComponent控件。本文将采用"Native C"模板,调用OpenGL ES图形库绘制3D图形&…

智慧校园-宿舍管理系统总体概述

在教育信息化的不断推动下,智慧校园宿舍管理系统脱颖而出,它以一种全新的视角和方式,重塑了高校宿舍管理的传统模式。该系统深度融合了云计算、物联网、大数据等先进科技,旨在为学生提供一个既安全可靠又充满便捷与温馨的居住体验…