归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告
Posted
技术标签:
【中文标题】归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告【英文标题】:SQLCipher "sqlite_3key" warning for Archiving and Profiling, No Warning for Debug 【发布时间】:2013-06-05 03:09:41 【问题描述】:我已按照 ios 的 SQLCipher 官方网站中的文档进行操作。我导入了 sqlite3.h。我添加了 openssl 和 sqlcipher xode.proj。他们其实都很好。
它正在加密数据库,我可以查询它们。构建是好的,除了这个关于 sqlite3_key 的小警告。
我可以看到自定义脚本的逐步构建过程,一切都很好。
我可以在头文件中看到该函数的 SQLITE_HAS_CODEC
条件在本机 sqlite3 中不存在,因为我们使用的是 sqlite 的 sqlcipher 版本。
我已将-DSQLITE_HAS_CODEC
添加到 C 标志和 C++ 标志中,这适用于项目和目标构建设置。
除此警告外,整体 SQLCipher 工作正常:
函数“sqlite3_key”的隐式声明在 C99 中无效
在 Xcode 中分析和归档二进制文件期间不断弹出。
通过 Debug 构建它不会引发此警告。
我还有什么需要做的吗?
【问题讨论】:
【参考方案1】:我(仍然)假设您在调试和发布配置之间有一些不同的构建设置(例如“标题搜索路径”)。如果您在构建设置中找不到问题,我建议您检查源文件的预处理输出:
选择发出警告的 .m 文件。 从 Xcode 菜单中选择产品 -> 生成输出 -> 预处理文件。 在预处理输出窗口的底部,切换 “正在运行”(默认使用调试配置)和 “Profiling”(使用 Release 配置)。在预处理输出中,搜索两个版本中的 sqlite3_key()
声明。您还可以检查是否包含正确版本的“sqlite3.h”。没有标题搜索路径,就会有一行
# 1 "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/sqlite3.h" 1 3 4
为 SQLCipher 正确设置标头搜索路径后,“sqlite3.h”的路径应该不同,因此您可以检查并再次比较“运行/调试”和“分析/发布”输出。
【讨论】:
嗨 Martin R,这是我得到的: sqlite3_key Running - line 37284 Profiling - line 37265 Header Path Running: # 4396 "sqlcipher/sqlite3.h" int sqlite3_key( sqlite3 *db, const void * pKey, int nKey);分析: - 什么都没有。所以我尝试从 Release 中删除: -DNS_BLOCK_ASSERTIONS=1 ,现在在 Profiling 中可以了。这个可以吗?这个标志重要吗? 哦,问题来了:如果我将它留在任何架构|任何用于 -DNS_BLOCK_ASSERTIONS=1 的 SDK,它都会标记该警告。但是,如果我至少选择 Any iOS SDK,它现在可以与 -DNS_BLOCK_ASSERTIONS=1 一起使用。感谢马丁的所有帮助,现在一切都好!以上是关于归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告的主要内容,如果未能解决你的问题,请参考以下文章
安卓4.4.2系统使用sqlcipher时,出现dlopen failed: cannot locate symbol referenced by...