Компиляция объединения sqlite для получения аутентификации пользователя выдает ошибки C2129 и C1083 - PullRequest
0 голосов
/ 11 июля 2019

Я хочу скомпилировать объединение 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" и без добавления других документов, это работает. Когда я пытаюсь скомпилировать его, я получаю ошибку C2129 в sqlite.c и ошибку C1083 в userauth.c

В этом каталоге находятся следующие файлы:

  • shell.c
  • sqlite3.c
  • sqlite3.h
  • sqlite3ext.h
  • sqlite3userauth.h
  • userauth.c
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, это было бы прекрасно!

1 Ответ

2 голосов
/ 11 июля 2019

Я следовал за [...] документацией 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, поскольку все необходимые объявления из этого заголовка, который входит в число основных источников, уже должны быть включены в объединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...