我希望编译sqlite合并来创建一个通过用户身份验证由密码保护的数据库。
我遵循了本教程:https://www.sqlite.org/howtocompile.html和SQLite为user_authentication:https://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt编写的文档
当我试图编译它时,不需要额外的编译时选项"-DSQLITE_USER_AUTHENTICATION“,并且不添加其他文档,它就能工作。当我试图编译它时,我在sqlite.c处得到错误C2129,在userauth.c处得到错误C1083
该目录中有以下文件:
cl -DSQLITE_USER_AUTHENTICATION shell.c sqlite3.c userauth.c -Fesqlite3.exe以下产出:
shell.c
sqlite3.c
sqlite3.c(222878): error C2129: static function 'void sqlite3CryptFunc(sqlite3_context *,int,sqlite3_value **)' declared but not defined
sqlite3.c(16263): note: see declaration of 'sqlite3CryptFunc'
userauth.c
userauth.c(26): fatal error C1083: Cannot open include file: 'sqliteInt.h': No such file or directory
Generating Code...如果c #的db.SetPassword("MyPW")在c中是可用的,那就太完美了!
发布于 2019-07-11 14:04:04
我跟着..。SQLite为user_authentication:https://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt编写的文档
不,看上去不像你做的。那些医生说
通过在构建中包含ext/userauth/userauth.c源代码文件并添加-DSQLITE_USER_AUTHENTICATION编译时选项来激活用户身份验证逻辑。ext/userauth/sqlite3userauth.h头文件可用于应用程序来定义接口。 在使用SQLite合并时,只需将ext/userauth/userauth.c源文件追加到合并的末尾即可。
您正在使用合并,因此应该将userauth.c的内容附加到合并中。也就是说,将其内容复制到sqlite3.c的末尾。从目录列表和命令行来看,您似乎试图将其构建为一个单独的源文件,并在最后链接到主源文件。这不是等价的,特别是它对static函数和变量范围的影响不同,这正是您的编译器所抱怨的。
目前尚不清楚-DSQLITE_USER_AUTHENTICATION是否也应与合并一起使用。从字面上阅读SQLite文档并不意味着这一点,但我倾向于猜测,如果您想启用该特性,那么无论哪种方式,它实际上都是必需的。
有关缺少的标题的错误有点令人担忧,您可能会再次看到它。如果您这样做了,只需删除或注释相应的#include指令就足够了,因为来自该头的所有所需的声明(这是主要源之一)都应该包含在合并中。
https://stackoverflow.com/questions/56990702
复制相似问题