Skip to content

Build documentation: SQLCIPHER_CFLAGS #600

@charlag

Description

@charlag

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions