• Linux aarch64交叉编译之sqlite数据库


    对于sqlite项目的交叉编译,该项目难度并不大,在嵌入式开发方面也属于基础库。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,基本无坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。

    1 sqlite简介

    SQLite第一个Alpha版本诞生于2000年5月,是个老古董了,它是一款轻量型的数据库,实现就是一个小的C库。它是D.RichardHipp建立的公有领域项目。它的设计目标是针对嵌入式设备的,所以占用资源非常低,一般只需要几百K的内存就够了。他的特点有:

    • 支持ACID事务
    • 零配置 – 无需安装和管理配置
    • 储存在单一磁盘文件中的一个完整的数据库
    • 数据库文件可以在不同字节顺序的机器间自由的共享
    • 支持数据库大小至2TB
    • 足够小, 大致13万行C代码, 4.43M
    • 比一些流行的数据库在大部分普通数据库操作要快
    • 简单, 轻松的API
    • 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
    • 良好注释的源代码, 并且有着90%以上的测试覆盖率
    • 独立: 没有额外依赖
    • 源码完全开源, 你可以用于任何用途
    • 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
    • 支持Windows/Linux/Unix等主流操作系统

    想对sqlite有更多了解:

    2 Linux 本地编译 & 交叉编译

    2.1 Linux(ubuntu20.04)上sqlite的编译

    sqlite通过configure文件来配置来编译,流程如下:

    1. $./configure
    2. $make
    3. $make DESTDIR=$PWD/out_x86_64 install

    这里关于安装位置,可以通过--prefix=具体路径来设置。编译后out_x86_64生成库文件内容为:

    1. └── usr
    2. └── local
    3. ├── bin
    4. │   └── sqlite3
    5. ├── include
    6. │   ├── sqlite3ext.h
    7. │   └── sqlite3.h
    8. └── lib
    9. ├── libsqlite3.a
    10. ├── libsqlite3.la
    11. ├── libsqlite3.so -> libsqlite3.so.0.8.6
    12. ├── libsqlite3.so.0 -> libsqlite3.so.0.8.6
    13. ├── libsqlite3.so.0.8.6
    14. └── pkgconfig
    15. └── sqlite3.pc

    2.2 aarch64交叉编译与移植

    因为是用aarch64交叉编译,需要提前配置环境,安装如下软件:

    1. sudo apt install binutils-aarch64-linux-gnu-dbg binutils-aarch64-linux-gnu cpp-aarch64-linux-gnu \
    2. g++-10-aarch64-linux-gnu g++-9-aarch64-linux-gnu g++-aarch64-linux-gnu g++ \
    3. gcc-10-aarch64-linux-gnu-base gcc-9-aarch64-linux-gnu-base gcc-aarch64-linux-gnu \
    4. pkg-config-aarch64-linux-gnu qemu-efi-aarch64 gcc arch-test

    在sqlite的目录中创建一个类似configure的配置文件aarch64-configure,内容为:

    1. #!/bin/bash
    2. ARCH="aarch64"
    3. DEST_CPU="arm64"
    4. HOST_OS="linux"
    5. HOST_ARCH="x86_64"
    6. export LINK_host="g++"
    7. export CXX_host="g++"
    8. export CC_host="gcc"
    9. export AR_host="ar"
    10. export CC=aarch64-linux-gnu-gcc
    11. export CXX=aarch64-linux-gnu-g++
    12. export LD=aarch64-linux-gnu-ld
    13. export RANLIB=aarch64-linux-gnu-ranlib
    14. export AR=aarch64-linux-gnu-ar
    15. export AS=aarch64-linux-gnu-as
    16. if [ -f "configure" ]; then
    17. ./configure --prefix=$PWD/out_aarch64 \
    18. --host=aarch64-linux-gnueabi
    19. fi

    配置后接下来和桌面版linux类似:

    1. $./aarch64-configure
    2. $make
    3. $make install

    这里执行后安装位置默认为:out_aarch64。

  • 相关阅读:
    字节跳动面试问到Hadoop源码,拿40K进大厂的Java程序员必备技能,你还不学习?不想进大厂
    ucore实验二
    C++11之防止类型收窄(列表初始化)
    Java面试之数据库篇(offer 拿来吧你)
    EntityFrameworkCore 模型自动更新(下)
    【C++笔记】之基于C++11 condition_variable实现的缓存限制队列
    华为eNSP配置专题-IPSec的配置
    无服务器的无状态性
    java Boolean 比较
    多线程私有数据pthread_key_create
  • 原文地址:https://blog.csdn.net/vviccc/article/details/126306107