Linux下NDK编译SQLite3

SQLite3交叉编译的过程可以参考:
https://blog.csdn.net/weixin_38184741/article/details/86544853


NDK的配置以及简单使用:

https://blog.csdn.net/weixin_38184741/article/details/93088418


下面介绍使用NDK工具编译SQLite3的过程。

一、使用NDK编译SQLite3

1、下载SQLite3源码:

https://sqlite.org/2018/sqlite-autoconf-3260000.tar.gz

2、在压缩包统一目录下,

静态库:

新建Android.mk文件,内容如下:

 LOCAL_PATH:=$(call my-dir)

#####################################################################
#build STATIC SQLITE3   #
#####################################################################
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-autoconf-3260000
LOCAL_MODULE := sqlite3a
LOCAL_SRC_FILES:=sqlite-autoconf-3260000/sqlite3.c
include $(BUILD_STATIC_LIBRARY)



#####################################################################
#build SHARED SQLITE3   #
#####################################################################
#include $(CLEAR_VARS)
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-autoconf-3260000
#LOCAL_MODULE:= sqlite3s
#LOCAL_SRC_FILES:=sqlite-autoconf-3260000/sqlite3.c
#include $(BUILD_SHARED_LIBRARY)

然后使用ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk命令进行NDK编译:

root@ubuntu:~/ken/sqlite3# ls
Android.mk  sqlite-autoconf-3260000  sqlite-autoconf-3260000.tar.gz
root@ubuntu:~/ken/sqlite3# ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk 
[arm64-v8a] Compile: sqlite3a <= sqlite3.c
[arm64-v8a] StaticLibrary  : libsqlite3a.a
[x86_64] Compile: sqlite3a <= sqlite3.c
[x86_64] StaticLibrary  : libsqlite3a.a
[mips64] Compile: sqlite3a <= sqlite3.c
[mips64] StaticLibrary  : libsqlite3a.a
[armeabi-v7a] Compile thumb  : sqlite3a <= sqlite3.c
[armeabi-v7a] StaticLibrary  : libsqlite3a.a
[armeabi] Compile thumb  : sqlite3a <= sqlite3.c
[armeabi] StaticLibrary  : libsqlite3a.a
[x86] Compile: sqlite3a <= sqlite3.c
[x86] StaticLibrary  : libsqlite3a.a
[mips] Compile: sqlite3a <= sqlite3.c
[mips] StaticLibrary  : libsqlite3a.a
root@ubuntu:~/ken/sqlite3# ls 
Android.mk  obj  sqlite-autoconf-3260000  sqlite-autoconf-3260000.tar.gz
root@ubuntu:~/ken/sqlite3# 

在Android.mk中,配置的是静态库。编译出的静态库:

root@ubuntu:~/ken/sqlite3# ls 
Android.mk  obj  sqlite-autoconf-3260000  sqlite-autoconf-3260000.tar.gz
root@ubuntu:~/ken/sqlite3# tree obj/
obj/
└── local
├── arm64-v8a
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── armeabi
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── armeabi-v7a
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── mips
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── mips64
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── x86
│   ├── libsqlite3a.a
│   └── objs
│   └── sqlite3a
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
└── x86_64
├── libsqlite3a.a
└── objs
└── sqlite3a
└── sqlite-autoconf-3260000
├── sqlite3.o
└── sqlite3.o.d

29 directories, 21 files
root@ubuntu:~/ken/sqlite3# 

如果想编译出动态库,可以自己修改.mk文件。

动态库:

Android.mk文件:

LOCAL_PATH:=$(call my-dir)

#####################################################################
#build STATIC SQLITE3   #
#####################################################################
#include $(CLEAR_VARS)
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-autoconf-3260000
#LOCAL_MODULE := sqlite3a
#LOCAL_SRC_FILES:=sqlite-autoconf-3260000/sqlite3.c
#include $(BUILD_STATIC_LIBRARY)



#####################################################################
#build SHARED SQLITE3   #
#####################################################################
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-autoconf-3260000
LOCAL_MODULE:= sqlite3s
LOCAL_SRC_FILES:=sqlite-autoconf-3260000/sqlite3.c
include $(BUILD_SHARED_LIBRARY)

然后使用ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk命令进行NDK编译:

root@ubuntu:~/ken/sqlite3# ls
Android.mk  sqlite-autoconf-3260000  sqlite-autoconf-3260000.tar.gz
root@ubuntu:~/ken/sqlite3# 
root@ubuntu:~/ken/sqlite3# 
root@ubuntu:~/ken/sqlite3# ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk 
[arm64-v8a] Compile: sqlite3s <= sqlite3.c
[arm64-v8a] SharedLibrary  : libsqlite3s.so
[arm64-v8a] Install: libsqlite3s.so => libs/arm64-v8a/libsqlite3s.so
[x86_64] Compile: sqlite3s <= sqlite3.c
[x86_64] SharedLibrary  : libsqlite3s.so
[x86_64] Install: libsqlite3s.so => libs/x86_64/libsqlite3s.so
[mips64] Compile: sqlite3s <= sqlite3.c
[mips64] SharedLibrary  : libsqlite3s.so
[mips64] Install: libsqlite3s.so => libs/mips64/libsqlite3s.so
[armeabi-v7a] Compile thumb  : sqlite3s <= sqlite3.c
[armeabi-v7a] SharedLibrary  : libsqlite3s.so
[armeabi-v7a] Install: libsqlite3s.so => libs/armeabi-v7a/libsqlite3s.so
[armeabi] Compile thumb  : sqlite3s <= sqlite3.c
[armeabi] SharedLibrary  : libsqlite3s.so
[armeabi] Install: libsqlite3s.so => libs/armeabi/libsqlite3s.so
[x86] Compile: sqlite3s <= sqlite3.c
[x86] SharedLibrary  : libsqlite3s.so
[x86] Install: libsqlite3s.so => libs/x86/libsqlite3s.so
[mips] Compile: sqlite3s <= sqlite3.c
[mips] SharedLibrary  : libsqlite3s.so
[mips] Install: libsqlite3s.so => libs/mips/libsqlite3s.so
root@ubuntu:~/ken/sqlite3# ls
Android.mk  libs  obj  sqlite-autoconf-3260000  sqlite-autoconf-3260000.tar.gz
root@ubuntu:~/ken/sqlite3# ls

编译出的动态库:

root@ubuntu:~/ken/sqlite3# tree libs/
libs/
├── arm64-v8a
│   └── libsqlite3s.so
├── armeabi
│   └── libsqlite3s.so
├── armeabi-v7a
│   └── libsqlite3s.so
├── mips
│   └── libsqlite3s.so
├── mips64
│   └── libsqlite3s.so
├── x86
│   └── libsqlite3s.so
└── x86_64
└── libsqlite3s.so

7 directories, 7 files
root@ubuntu:~/ken/sqlite3# tree obj/
obj/
└── local
├── arm64-v8a
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── armeabi
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── armeabi-v7a
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── mips
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── mips64
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
├── x86
│   ├── libsqlite3s.so
│   └── objs
│   └── sqlite3s
│   └── sqlite-autoconf-3260000
│   ├── sqlite3.o
│   └── sqlite3.o.d
└── x86_64
├── libsqlite3s.so
└── objs
└── sqlite3s
└── sqlite-autoconf-3260000
├── sqlite3.o
└── sqlite3.o.d

29 directories, 21 files
root@ubuntu:~/ken/sqlite3# 

二、工程文件中,使用NDK编译出的SQLite3库

引用SQLite3动态库:

在编译工程文件的include $(CLEAR_VARS)之前

include $(CLEAR_VARS)
LOCAL_MODULE := libsqlite3s
LOCAL_SRC_FILES :=./ndk_so/libs_sqlite3/libs/$(TARGET_ARCH_ABI)/libsqlite3s.so
include $(PREBUILT_SHARED_LIBRARY)

然后再NDK编译工程时,添加:

LOCAL_SHARED_LIBRARIES := libsqlite3s

引用SQLite3静态库:

在编译工程文件的include $(CLEAR_VARS)之前

 include $(CLEAR_VARS)
LOCAL_MODULE := libsqlite3a
LOCAL_SRC_FILES := ./ndk_so/libs_sqlite3/obj/local/$(TARGET_ARCH_ABI)/libsqlite3a.a
include $(PREBUILT_STATIC_LIBRARY)

然后再NDK编译工程时,添加:

  LOCAL_STATIC_LIBRARIES := libsqlite3a

其中在 LOCAL_SRC_FILES 包含libsqlite3库时,路径根据自己实际情况进行指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值