Build documentation: SQLCIPHER_CFLAGS
charlag opened this issue · 3 comments
Expected Behavior
I can build the library like documentation suggests, without including SQLCIPHER_CFLAGS
. Docs say:
You may also optionally include SQLCIPHER_CFLAGS to override the default features SQLCipher core is compiled with
Actual Behavior
> Task :android-database-sqlcipher:buildNative FAILED
SQLCIPHER_CFLAGS=
OPENSSL_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../openssl
SQLCIPHER_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../sqlcipher
SQLCIPHER_OTHER_CFLAGS=-DLOG_NDEBUG -fstack-protector-all
ANDROID_NATIVE_ROOT_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/external/android-libs
NDK_APP_PLATFORM=16
make[1]: Entering directory '/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp'
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/* /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/*
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/gdbserver /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/gdbserver
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/gdb.setup /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/gdb.setup
[armeabi-v7a] Compile thumb : sqlcipher <= sqlite3.c
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o
/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o.d -target armv7-none-linux-androideabi16 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes --sysroot /home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -D_FORTIFY_SOURCE=2 -fpic -march=armv7-a -mthumb -Oz -DNDEBUG -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../openssl/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/sources/cxx-stl/llvm-libc++/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/sources/cxx-stl/llvm-libc++abi/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp -D_FILE_OFFSET_BITS=32 -DANDROID -DLOG_NDEBUG -fstack-protector-all -nostdinc++ -Wformat -Werror=format-security -c /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp/sqlite3.c -o /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o
/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp/sqlite3.c:69912:24: error: incomplete definition of type 'struct Btree'
sqlite3_mutex_enter(p->pBt->mutex);
Steps to Reproduce
Run build e.g. like this:
PATH=$PWD/../android-ndk-r23:$PATH \
ANDROID_NDK_ROOT=$PWD/../android-ndk-r23 \
ANDROID_NDK_HOME=$PWD/../android-ndk-r23 \
OPENSSL_ROOT=$PWD/../openssl \
SQLCIPHER_ROOT=$PWD/../sqlcipher \
make build-release
and see that it will be interpreted as SQLCIPHER_CFLAGS=
(like in the snippet above)
So it doesn't default to the flags from build.gradle for some reason. You have to include the flags and SQLITE_HAS_CODEC
is not enough, you must include SQLITE_TEMP_STORE
according to SQLCipher Core docs.
SQLCipher version (can be identified by executing PRAGMA cipher_version;
):
4.5.0
SQLCipher for Android version:
4.5.0
Hi @charlag,
Thank you for pointing this out, we will adjust the README to reflect the necessary environment variables needed for building from source.
Hi @charlag
This has been fixed in the master branch now, thanks again!
@developernotes thanks for the quick fix!