找出构建SQLite时使用了哪些编译选项的方法

bz4sfanl  于 2023-05-29  发布在  SQLite
关注(0)|答案(4)|浏览(197)

在我的性能测试中,我发现苹果在iPhone3.0上提供的SQLite版本比我自己编译的合并SQLite版本快得多。所以我的问题是,有没有办法找出苹果使用了哪些编译选项?
是否有一个测试应用程序可以打印出所有默认的set pragams和sqlite3_config设置?

mwecs4sa

mwecs4sa1#

您可以使用compile_options杂注(或链接文档中提到的相关函数)查看构建SQLite时使用的编译时选项。但是,这个杂注(以及相关函数)的可用性似乎取决于它是否在编译时启用。SQLite文档说:
通过在编译时指定SQLITE_OMIT_COMPILEOPTION_DIAGS选项,可以省略对诊断函数sqlite3_compileoption_used()和sqlite3_compileoption_get()的支持。
因此,很可能您的发行版在编译时没有启用此功能,这意味着您可能无法查看选项。

xe55xuns

xe55xuns2#

除了尝试所有可能的排列并测试每一种排列以查看哪些行为相同之外,没有办法询问libsqlite的确切配置(除非Apple进行了自定义修改)。最好的方法是调用sqlite3_libversion,它返回sqlite的版本号。

jv2fixgn

jv2fixgn3#

看起来pragma设置中唯一的不同是该高速缓存_size,默认值是2000,但在iPhone上是500。
在某些系统上,可以通过以下方式读取编译器设置:objdump --full-contents --section .GCC.command.line

nhaq1z21

nhaq1z214#

从命令行:

# echo "PRAGMA compile_options;" | sqlite3

COMPILER=gcc-10.2.0
ENABLE_COLUMN_METADATA
ENABLE_DBPAGE_VTAB
ENABLE_DBSTAT_VTAB
ENABLE_FTS3_PARENTHESIS
ENABLE_FTS4
ENABLE_FTS5
ENABLE_GEOPOLY
ENABLE_JSON1
ENABLE_PREUPDATE_HOOK
ENABLE_RTREE
ENABLE_SESSION
ENABLE_STAT4
ENABLE_UNLOCK_NOTIFY
ENABLE_UPDATE_DELETE_LIMIT
OMIT_LOOKASIDE
SECURE_DELETE
SOUNDEX
TEMP_STORE=1
THREADSAFE=1
USE_ALLOCA
USE_FCNTL_TRACE

相关问题