我想编译sqlite合并来创建一个通过用户身份验证受密码保护的数据库。
我遵循了本教程:https://www.sqlite.org/howtocompile.html
以及SQLite为用户认证提供的文档:https://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt
当我尝试编译它时,没有额外的编译时间选项“-DSQLITE_USER_AUTHENTICATION”,也没有添加其他文档。当我试图用sqlite.c中的错误C2129和userauth.c中的错误C1083编译它时
此目录中有以下文件:
壳牌公司
sqlite3.c语言
sqlite3.h标准
sqlite3ext.h文件
sqlite3userauth.h
用户身份验证

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中有类似C#的db.SetPassword(“MyPW”)的东西可用,那将是完美的!

最佳答案

我遵循了SQLite为用户认证提供的文档: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指令就足够了,因为该头中的所有必需声明(属于主要源)都应该已经包含在合并中。

关于c - 编译sqlite合并以获得用户身份验证会引发错误C2129和C1083,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56990702/

10-11 15:15