【问题标题】:clsql connect oracle databaseclsql 连接oracle数据库
【发布时间】:2010-08-27 22:38:27
【问题描述】:

我正在用clsql 做一些练习。我想连接我的 oracle 服务器,因此我的连接功能是;

(connect '("192.168.2.3" "xe" "username" "password") :database-type :oracle)

当我点击返回时,出现以下错误消息。

Couldn't load foreign libraries "libclntsh", "oci". (searched *FOREIGN-LIBRARY-SEARCH-PATHS*) [Condition of type SIMPLE-ERROR]

我已经安装了oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm

并定义export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib

那么,我还应该怎么做才能连接服务器呢?

【问题讨论】:

  • 什么操作系统?什么 Lisp 编译器?如何安装 CLSQL(asdf-install、clbuild 等)?
  • 当我无法连接到 MySQL 时,部分问题在于字长:操作系统、Lisp 和 MySQL 库是 32 位和 64 位的混合体。 (我从来没有让它完全工作,但修复这个问题至少会导致它在这个过程的后期失败!)
  • 我使用的是 linux (fedora 13),我的 lisp 解释器是 sbcl,我通过 clbuild 安装了 clsql。我在 mysql 上也遇到了类似的错误。
  • 错误消息中提到的文件是否存在于您系统的某个位置?如果有,在哪里?这些文件在 FOREIGN-LIBRARY-SEARCH-PATHS 中存在的目录(如果存在的话),我怀疑这是您的 LISP 环境中的某种集合?

标签: oracle lisp clsql


【解决方案1】:

我最近在玩oracle,发现您只需将libclntsh的路径放入/etc/ld.conf.d/oracle.conf

我的设置如下(redhat,centos - 以 root 身份):从 oracle 下载

oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
install via rpm -ivh oracle*.rpm

创建文件/etc/ld.so.conf.d/oracle.conf:

/usr/lib/oracle/12.1/client64/lib

然后执行ldconfig

现在clsql-oracle不在quicklisp中,我下载并解压了clsql-6.6.2,然后

(require "asdf")
(push #P"/opt/jeff/clsql-6.6.2/" asdf:*central-registry*)
(asdf:load-system :clsql-oracle)
(defparameter *some-db* (connect '("127.0.0.1:1521/db1" "SOME_USER_RO" "*******") :database-type :oracle))

瞧,它的工作原理

【讨论】:

  • 遵循您对 ld.so.conf 的建议并运行 ldconfig 帮助我克服了错误
【解决方案2】:

动态链接到 Oracle 库(即在 C/C++ 中)让我绊倒的一件事是 libclntsh.so 共享对象的版本 so 名称之后.所以可能需要在同一个目录下创建软链接,确保软链接名称就是libclntsh.so

【讨论】:

  • 我认为这应该是我的答案的一部分,感谢您指出 - 有时您只是将“.so”文件的名称以外的所有内容都正确,因为它包含特定的 oracle 版本。有些软件包已经为您准备好了,有些则没有——比如在 debian 和早期的 oracle 的 *.rpm 上。所以肯定的是,如果您创建了 ldconfig 条目,但它仍然无法正常工作,请检查 libclnt.so 文件的名称或链接是否存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 2014-03-18
  • 2019-12-30
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多