编译sqlite合并以获得用户身份验证会引发错误C2129和C1083

时间:2019-07-11 13:45:28

标签: c sqlite

我想编译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.c
if file_count_indst < file_limit:
    count=0;
    for mfile in move_list:
        shutil.move(src_filepath + '\\' + mfile, dst_filepath)
        count = count +1
        if count==1000:
            break

以下输出:

cl -DSQLITE_USER_AUTHENTICATION shell.c sqlite3.c userauth.c -Fesqlite3.exe

如果c中有C#的db.SetPassword(“ MyPW”)可用,那将是完美的!

1 个答案:

答案 0 :(得分:2)

  

我按照[...] 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指令就足够了,因为来自该标头的所有必需的声明(主要来源之一)应该已经包含在合并中。