首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确构建.a文件(KMM)

如何正确构建.a文件(KMM)
EN

Stack Overflow用户
提问于 2021-11-24 16:36:33
回答 1查看 112关注 0票数 0

我们需要在不使用Cocoapods的情况下将SQLCipher包含在KMM项目中。这涉及到构建一个libSQLCipher.a.我能够在终端中使用以下命令:

代码语言:javascript
复制
./configure --enable-tempstore=yes --with-crypto-lib=commoncrypto CFLAGS="
-DSQLITE_HAS_CODEC=1
-DSQLITE_TEMP_STORE=3 
-DSQLCIPHER_CRYPTO_CC
-DSQLITE_SOUNDEX 
-DSQLITE_THREADSAFE 
-DSQLITE_ENABLE_RTREE 
-DSQLITE_ENABLE_STAT3 
-DSQLITE_ENABLE_STAT4 
-DSQLITE_ENABLE_COLUMN_METADATA 
-DSQLITE_ENABLE_MEMORY_MANAGEMENT 
-DSQLITE_ENABLE_LOAD_EXTENSION -DSQLITE_ENABLE_UNLOCK_NOTIFY 
-DSQLITE_ENABLE_FTS3_PARENTHESIS 
-DSQLITE_ENABLE_FTS4 
-DSQLITE_ENABLE_FTS4_UNICODE61 
-DSQLITE_ENABLE_JSON1 
-DSQLITE_ENABLE_FTS5 
-DHAVE_USLEEP=1 
-DSQLITE_MAX_VARIABLE_NUMBER=99999"
LDFLAGS="/usr/local/Cellar/openssl@1.1 /1.1.1l_1/lib/libcrypto.a"

make sqlite3.c

`xcrun --sdk iphoneos --find clang` -x c -target arm64-apple-ios8.0 -isysroot `xcrun --sdk iphoneos --show-sdk-path` -fmodules -DSQLITE_HAS_CODEC=1 -fstrict-aliasing -fembed-bitcode-marker -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLITE_SOUNDEX -DSQLITE_THREADSAFE -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_STAT3 -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_LOAD_EXTENSION -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS4_UNICODE61 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLCIPHER_CRYPTO_CC -DHAVE_USLEEP=1 -DSQLITE_MAX_VARIABLE_NUMBER=99999 -DNDEBUG -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLITE_SOUNDEX -DSQLITE_THREADSAFE -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_STAT3 -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_LOAD_EXTENSION -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS4_UNICODE61 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLCIPHER_CRYPTO_CC -DHAVE_USLEEP=1 -DSQLITE_MAX_VARIABLE_NUMBER=99999 -fno-objc-arc -fmodule-name=SQLCipher -Oz -fno-common -c sqlite3.c -o sqlite3.o

`xcrun --sdk iphoneos --find libtool` -static -arch_only arm64 -syslibroot `xcrun --sdk iphoneos --show-sdk-path` -o libSQLCipher.a sqlite3.o

我把libSQLCipher.a带到安卓工作室,并根据KMM网站上的说明设置它,创建.def文件,链接它,添加到build.gradle等。我可以访问诸如sql3_open()之类的方法,这是很棒的。但是,我不能访问sqlite3_key()、sqlite3_key_v2()、sqlite3_rekey()、sqlite3_rekey_v2()、sqlite3_activate_see()

我在.h文件中注意到,这些内容如下:

代码语言:javascript
复制
/* BEGIN SQLCIPHER */
#ifdef SQLITE_HAS_CODEC
 // sqlite3_key(), sqlite3_key_v2(), sqlite3_rekey(), sqlite3_rekey_v2(), 
sqlite3_activate_see() methods are defined here
#endif
/* END SQLCIPHER */

SQLCipher网站说要在构建配置中包括SQLCipher,这看起来像是我正在做的。所以我真的不明白为什么我不能访问这些方法。

有点冗长的问题,但真的希望这里的人有一些建议。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-25 07:55:38

Kotlin/本机的cinterop工具应该有明确指定的所有编译器选项来“查看”标头,就像编译器在构建库时那样。若要指定编译器选项,请使用文献资料中描述的DSL。

一般来说,这样的事情应该是可行的:

代码语言:javascript
复制
...
kotlin {
    iosArm64 { // Replace with a target you need.
        compilations.getByName("main") {
            val myInterop by cinterops.creating {
...
                compilerOpts("-DSQLITE_HAS_CODEC=1")
...
        }
    }
}
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70099744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档