我想编译 sqlite 合并来创建一个通过用户身份验证受密码保护的数据库。
我遵循了本教程:https://www.sqlite.org/howtocompile.html 还有 SQLite 的 user_authentication 文档: https: //www.sqlite.org/src/doc/trunk/ext/userauth/user-授权.txt
当我尝试在不使用额外的编译时选项“-DSQLITE_USER_AUTHENTICATION”并且不添加其他文档的情况下编译它时,它可以工作。当我尝试编译它时,我在 sqlite.c 处收到错误 C2129,在 userauth.c 处收到错误 C1083
该目录中有以下文件:
cl -DSQLITE_USER_AUTHENTICATION shell.c sqlite3.c userauth.c -Fesqlite3.exe
Run Code Online (Sandbox Code Playgroud)
以下输出:
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...
Run Code Online (Sandbox Code Playgroud)
如果 c 中有类似 C# 的 db.SetPassword("MyPW") 的东西,那就完美了!
我遵循 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指令就足够了,因为该标头(主要来源之一)中的所有所需声明都应该已包含在合并中。
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |