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有更多了解:

  • 官方查看:SQLite Home Page
  • github开源项目mirror地址:GitHub - sqlite: Official Git mirror of the SQLite

2 Linux 本地编译 & 交叉编译

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

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

$./configure
$make
$make DESTDIR=$PWD/out_x86_64 install

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

└── usr
    └── local
        ├── bin
        │   └── sqlite3
        ├── include
        │   ├── sqlite3ext.h
        │   └── sqlite3.h
        └── lib
            ├── libsqlite3.a
            ├── libsqlite3.la
            ├── libsqlite3.so -> libsqlite3.so.0.8.6
            ├── libsqlite3.so.0 -> libsqlite3.so.0.8.6
            ├── libsqlite3.so.0.8.6
            └── pkgconfig
                └── sqlite3.pc

2.2 aarch64交叉编译与移植

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

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

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

#!/bin/bash

ARCH="aarch64"
DEST_CPU="arm64"
HOST_OS="linux"
HOST_ARCH="x86_64"

export LINK_host="g++"
export CXX_host="g++"
export CC_host="gcc"
export AR_host="ar"

export CC=aarch64-linux-gnu-gcc
export CXX=aarch64-linux-gnu-g++
export LD=aarch64-linux-gnu-ld
export RANLIB=aarch64-linux-gnu-ranlib
export AR=aarch64-linux-gnu-ar
export AS=aarch64-linux-gnu-as

if [ -f "configure" ]; then
    ./configure --prefix=$PWD/out_aarch64 \
				--host=aarch64-linux-gnueabi
fi

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

$./aarch64-configure
$make
$make install

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

你可能感兴趣的:(Linux,系统,linux,debian,运维)