sqlite3 extension-functions: указанный модуль не найден - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь загрузить расширение extension-functions sqlite3. Файл C можно найти здесь внизу.

Я использую win10 и использую VS2015. Я скомпилировал (без ошибок) 32- и 64-битные версии в .dll и попытался загрузить их с помощью оболочки sqlite3 с той же ошибкой. (Используются 32- и 64-разрядные версии файла sqlite3.dll соответственно). Ниже я пытаюсь загрузить расширение, используя 32-битный sqlite.

sqlite> select load_extension('C:\sqlite\ext32.dll');
Error: The specified procedure could not be found.
sqlite> select load_extension('C:\sqlite\ext64.dll');
Error: The specified module could not be found.

Я использовал эту команду для компиляции 32-битной cl extension-functions.c -link -dll -out:ext32.dll. Затем я запустил vcvarsall x64 и cl extension-functions.c -link -dll -out:ext64.dll для 64-битной версии.

1 Ответ

0 голосов
/ 16 сентября 2018

extension-functions.c не экспортирует никакую функцию (она же «процедура»), поэтому выходная DLL довольно бесполезна.

Оболочка SQLite ожидает функцию с именем sqlite3_extension_init, как указано в Программирование загружаемых расширений Глава документации SQLite.

Итак, вам просто нужно изменить extension-functions.c следующим образом (около строки 1837).

До:

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */

после

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...