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库时,路径根据自己实际情况进行指定