Pysqlcipher3 не может найти общую библиотеку sqllite3 - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть пользовательская ОС Linux для платы ARM.Я собрал pysqlcipher3 для платформы в сборке yocto.Программа python3 не может определить символ sqlite3 в общих библиотеках.

>>> from pysqlcipher3 import dbapi2 as sqlcipher
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/site-packages/pysqlcipher3/dbapi2.py", line 33, in <module>
    from pysqlcipher3._sqlite3 import *
ImportError: /usr/lib/python3.5/site-packages/pysqlcipher3/_sqlite3.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: sqlite3_enable_load_extension

Но я добавил пакеты sqlite3 в yocto.Я идентифицировал библиотеку в rootfs.

/ usr / lib / libsqlite3.so.0

Я проверил символы в библиотеке с помощью команды nm, и кажется, что в ней отсутствует символ(sqlite3_enable_load_extension).Пожалуйста, помогите мне решить эту проблему.На некоторых форумах было предложено использовать опцию LD_PRELOAD. Она портит операции sqlcipher

, когда я пытаюсь открыть базу данных, я получаю эту ошибку

getSingle failed  file is encrypted or is not a database

1 Ответ

1 голос
/ 19 апреля 2019

Модуль pysqlcipher зависит от библиотеки libsqlcipher.so на устройстве.Libsqlcipher должен быть собран с --enable-load-extension, чтобы избежать этой ошибки

Для сборки Yocto я добавил флаг в файл рецепта sqlcipher, чтобы избежать этой проблемы.

EXTRA_OECONF = "--enable-load-extension --disable-tcl  CFLAGS=-DSQLITE_HAS_CODEC"
...