linux+ndk静态编译,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、付费专栏及课程。

余额充值