问题描述
我正在尝试使用 cl-sql
访问 sqlite3
的数据库。
但我收到错误
Couldn't load foreign libraries "libsqlite3","sqlite3". (searched CLsql-SYS:*FOREIGN-LIBRARY-SEARCH-PATHS*: (#P"/usr/lib/clsql/" #P"/usr/lib/"))
sqlite
也是如此。
我已经使用 sqlite3
安装了 apt-get
,并且在 libsqlite.so.0
目录中有一个文件 /usr/lib
。
我也尝试从源代码构建 sqlite3
,但无法获取 so
文件。我做错了什么?
解决方法
你的问题是 cl-sql 有第三方依赖。如果您检查 cl-sql 的实现(可能在“~/quicklisp/dists/quicklisp/software/clsql-202011220-git/db-sqlite3/sqlite3-loader.lisp”下),您将看到函数 {{1}正在尝试加载名为“libsqlite3”或“sqlite3”的库。
根据您的操作系统,这将查找 .dll 或 .so 的名称正好是其中一个名称。
鉴于 libsqlite.so 的版本在您的特定 linux 发行版上具有不同的名称,您有许多不同的选项来使该库工作。
- 使用正确的二进制文件安装一个 sqlite3 版本
- 创建指向通过
database-type-load-foreign
重定向的二进制文件的软链接(假设 libsqlite.so.0 是 clsql 正在查找的文件) - 添加到
ln -s /usr/lib/libsqlite.so.0 /usr/lib/libsqlite3.so
的新路径以指向正确的二进制文件,如果它安装在其他地方(通过CLSQL-SYS:*FOREIGN-LIBRARY-SEARCH-PATHS*
)