1、下载官方源码

wget https://sqlite.org/2026/sqlite-autoconf-3510200.tar.gz
tar -xvf sqlite-autoconf-3510200.tar.gz
cd sqlite-autoconf-3510200
2、创建CMakeLists.txt
gedit CMakeLists.txt
cpp
cmake_minimum_required(VERSION 3.10)
project(sqlite3 C)
# ---------------- Options ----------------
option(SQLITE_BUILD_STATIC "Build static sqlite3 library" ON)
option(SQLITE_BUILD_SHARED "Build shared sqlite3 library" ON)
option(SQLITE_ENABLE_FTS5 "Enable FTS5 extension" ON)
option(SQLITE_ENABLE_JSON1 "Enable JSON1 extension" ON)
# ---------------- Source ----------------
set(SQLITE_SRC
sqlite3.c
)
set(SQLITE_PUBLIC_HEADERS
sqlite3.h
)
# ---------------- Compile Definitions ----------------
set(SQLITE_DEFINES
SQLITE_THREADSAFE=1
)
if(SQLITE_ENABLE_FTS5)
list(APPEND SQLITE_DEFINES SQLITE_ENABLE_FTS5)
endif()
if(SQLITE_ENABLE_JSON1)
list(APPEND SQLITE_DEFINES SQLITE_ENABLE_JSON1)
endif()
# ---------------- Static Library ----------------
if(SQLITE_BUILD_STATIC)
add_library(sqlite3_static STATIC ${SQLITE_SRC})
target_compile_definitions(sqlite3_static PRIVATE ${SQLITE_DEFINES})
target_include_directories(sqlite3_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(sqlite3_static PROPERTIES
OUTPUT_NAME sqlite3
POSITION_INDEPENDENT_CODE ON
)
endif()
# ---------------- Shared Library ----------------
if(SQLITE_BUILD_SHARED)
add_library(sqlite3_shared SHARED ${SQLITE_SRC})
target_compile_definitions(sqlite3_shared PRIVATE ${SQLITE_DEFINES})
target_include_directories(sqlite3_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(sqlite3_shared PROPERTIES
OUTPUT_NAME sqlite3
VERSION 3
SOVERSION 3
)
endif()
# ---------------- Install ----------------
install(FILES ${SQLITE_PUBLIC_HEADERS}
DESTINATION include)
if(SQLITE_BUILD_STATIC)
install(TARGETS sqlite3_static
ARCHIVE DESTINATION lib)
endif()
if(SQLITE_BUILD_SHARED)
install(TARGETS sqlite3_shared
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
endif()
bash
#!/bin/bash
set -e
MODE=${1:-linux}
LIBTYPE=${2:-both} # static | shared | both
BUILD_TYPE=Release
JOBS=$(nproc)
ROOT_DIR=$(pwd)
INSTALL_ROOT=${ROOT_DIR}/install
ANDROID_NDK=${ANDROID_NDK:-$HOME/android-sdk/ndk/26.2.11394342}
ANDROID_ABI=arm64-v8a
ANDROID_API=33
# -------- lib type switch --------
SQLITE_BUILD_STATIC=OFF
SQLITE_BUILD_SHARED=OFF
case ${LIBTYPE} in
static)
SQLITE_BUILD_STATIC=ON
;;
shared)
SQLITE_BUILD_SHARED=ON
;;
both)
SQLITE_BUILD_STATIC=ON
SQLITE_BUILD_SHARED=ON
;;
*)
echo "Invalid lib type: ${LIBTYPE}"
echo "Usage: $0 [linux|android] [static|shared|both]"
exit 1
;;
esac
build_linux() {
echo "==== Build sqlite3 for Linux (${LIBTYPE}) ===="
rm -rf build_linux
mkdir build_linux
cd build_linux
cmake .. \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DCMAKE_INSTALL_PREFIX=${INSTALL_ROOT}/linux \
-DSQLITE_BUILD_STATIC=${SQLITE_BUILD_STATIC} \
-DSQLITE_BUILD_SHARED=${SQLITE_BUILD_SHARED} \
-DSQLITE_ENABLE_FTS5=ON \
-DSQLITE_ENABLE_JSON1=ON
make -j${JOBS}
make install
}
build_android() {
echo "==== Build sqlite3 for Android (${LIBTYPE}) ===="
rm -rf build_android
mkdir build_android
cd build_android
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=${ANDROID_ABI} \
-DANDROID_PLATFORM=android-${ANDROID_API} \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DCMAKE_INSTALL_PREFIX=${INSTALL_ROOT}/android/${ANDROID_ABI} \
-DSQLITE_BUILD_STATIC=${SQLITE_BUILD_STATIC} \
-DSQLITE_BUILD_SHARED=${SQLITE_BUILD_SHARED} \
-DSQLITE_ENABLE_FTS5=ON \
-DSQLITE_ENABLE_JSON1=ON
make -j${JOBS}
make install
}
case ${MODE} in
linux)
build_linux
;;
android)
build_android
;;
*)
echo "Usage: $0 [linux|android] [static|shared|both]"
exit 1
;;
esac
4、编译动态与静态库
编译linux环境 动态库和静态库
sh ./build_sqlite3.sh linux
编译linux环境 动态库
sh ./build_sqlite3.sh linux shared
编译linux环境 静态库
sh ./build_sqlite3.sh linux static
编译android环境 动态库和静态库
sh ./build_sqlite3.sh android
编译android环境 动态库
sh ./build_sqlite3.sh android shared
编译android环境 静态库
sh ./build_sqlite3.sh android static