编译 sqlite 合并以获取用户身份验证会引发错误 C2129 和 C1083
Posted
技术标签:
【中文标题】编译 sqlite 合并以获取用户身份验证会引发错误 C2129 和 C1083【英文标题】:Compiling sqlite amalgamation to get user authentication throws errors C2129 and C1083 【发布时间】:2019-07-11 13:45:28 【问题描述】:我想编译 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
在这个目录中有以下文件:
shell.c sqlite3.c sqlite3.h sqlite3ext.h sqlite3userauth.h userauth.ccl -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 中可用,那将是完美的!
【问题讨论】:
【参考方案1】:我遵循 [...] 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
指令就足够了,因为该标头中所有需要的声明(主要来源之一)应该已经包含在合并中。
【讨论】:
查看at the repository source of userauth.c,整个文件的条件依赖于设置的SQLITE_USER_AUTHENTICATION
,因此可能应该被定义。但是,sqliteInt.h
的内容已经存在于合并中,因此 OP 应该能够删除 #include
行(在将 userauth.c 附加到合并之后)。不过,我还没有测试过!
谢谢,通过附加代码解决了这两个问题!
这是一个完全独立的问题,@Duco,如果你把它当作一个问题,你更有可能得到有用的答案。
@JohnBollinger 感谢您的详细回答。我收到另一个错误here。你能看一下吗?以上是关于编译 sqlite 合并以获取用户身份验证会引发错误 C2129 和 C1083的主要内容,如果未能解决你的问题,请参考以下文章
.Net Core 3.1 合并 JWT 和 OpenIDConnect 身份验证
在 Restful Web 服务中如何以编程方式获取用户名或密码(基本身份验证)
Microsoft Graph API - Blazor Server App .NET 5.0 使用 Azure 身份验证,MsalUiRequiredException 因用户质询而引发