2012-02-24 40 views
1

我想使用CLSQL从SBCL连接到MySQL。我使用quicklisp(ql:quickload'clsql)加载CLSQL。但是,在调用(clsql:connect'(...):database-type:mysql)时,它说:CentOS安装中的CLSQL

无法加载外部库“libmysqlclient”,“libmysql”。 (搜索CLSQL-SYS:FOREIGN-LIBRARY-SEARCH-PATHS)。

我在CentOS,基本上就是我想要做的就是

  1. 使用yum安装mysql客户端的开发头文件,所以UFFI可以找到它(我没有这样做)
  2. 安装后,能够连接到本地MySQL服务器(我认为1.完成后,它可以自动工作)。

我目前使用:

  • 的CentOS 5.7决赛(32位)
  • SBCL 1.0.55
  • Quicklisp测试
  • 百胜库:基地,EPEL,演员,更新

我并没有问及如何在CentOS上安装MySQL开发标题,因为那个wou ld只解决了我的一部分问题,我仍然需要知道我的机器中缺少什么。我也没有尝试从源代码构建libmysqlclient/libmysql,因为我不知道clsql是否能够找到它。我想不是。

我真的很抱歉,如果我的问题不知何故错过了这一点,但广泛的谷歌搜索没有产生任何结果。如果有人告诉我他们不能在CentOS上安装MySQL客户端开发头文件,我会嘲笑他们,并告诉他们使用yum搜索,但是我没有在yum上找到它。

我知道ubuntu(和debian)的解决方案,因为有一个cl-sql包,我也可以很容易地在那里找到mysql头文件,但我在CentOS上需要它。

在此先感谢。

回答

1

不知何故,当你尝试的东西足够长的时间,它会得到完成;)

这里就是我所做的,如果有人需要就这个问题的答案,并绊倒:

(ql:quickload 'clsql) 

;tell clsql where to search for mysql libs 
(push #P"/usr/lib/mysql" CLSQL-SYS:*FOREIGN-LIBRARY-SEARCH-PATHS*) 

;add mysql libs to clsql library path [apparent from code :] 
(clsql:push-library-path "/usr/lib/mysql/") 

;directly tell uffi to load mysqlclient shared library 
(uffi:load-foreign-library "/usr/lib/mysql/libmysqlclient.so") 

当然,你可以如果需要,用mysql库的不同路径替换“/ usr/lib/mysql”。

+0

我不确定自2012年以来代码是如何改变的,但今天(2016年)您包含单词'push'的行都做同样的事情。所以''/ usr/lib/mysql''在列表中结束两次。 – daveloyall 2016-07-15 18:29:32

+0

另外,pathspec'#P“/ usr/lib/mysql”'和字符串'“/ usr/lib/mysql”之间有一些区别。 – daveloyall 2016-07-15 18:30:16

+1

我记得我这样做是为了让它在不同的系统上工作(使用#'push is redundant)。不同系统甚至同一系统的不同版本的CLSQL安装问题让我感到厌倦,我很久以前就转向Postgres和后现代,这很容易,可以直接在TCP/IP上使用(不使用UFFI或CFFI) ),坦率地说,有更好的使用体验。由于它是一个ORDBMS,它很好地集成到CLOS中。 – 2016-07-18 06:48:02