首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBCL中的clsql故障

SBCL中的clsql故障
EN

Stack Overflow用户
提问于 2011-02-18 01:46:43
回答 2查看 2.2K关注 0票数 2

我正在尝试使clsql工作(过去使用cl-mysql,但正在寻找替代方法)。在这一点上,我只是想玩玩,但我在connect被阻止了

代码语言:javascript
复制
(connect '("localhost" "test" "user" "password") :database-type :mysql)

让我明白了

代码语言:javascript
复制
erred while invoking #<COMPILE-OP (:VERBOSE NIL) {BDFF0B9}> on
#<CLSQL-UFFI-SOURCE-FILE "clsql-uffi" "uffi" "clsql_uffi">
   [Condition of type ASDF:OPERATION-ERROR]

Backtrace:
  0: ((SB-PCL::FAST-METHOD ASDF:PERFORM (ASDF:COMPILE-OP CLSQL-UFFI-SYSTEM::CLSQL-UFFI-SOURCE-FILE)) ..)
  1: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1.)) ..)
  2: ((LAMBDA ()))
  3: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK))
  4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]324))
  5: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK ..)
  6: ((FLET SB-C::WITH-IT))
  7: ((SB-PCL::FAST-METHOD ASDF:OPERATE (T T)) #<unavailable argument> #<unavailable argument> ASDF:LOAD-OP :CLSQL-MYSQL)[:EXTERNAL]
  8: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.)) ..)
  9: (CONNECT ("localhost" "test" "user" "password"))[:EXTERNAL]
 10: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CONNECT '("localhost" "test" "user" "password") :DATABASE-TYPE :MYSQL) #<NULL-LEXENV>)
 11: ((LAMBDA ()))
 --more--

如果我一直遵循accept重启(为简洁起见,在上面进行了修剪),我最终会得到

代码语言:javascript
复制
Attempt to call an undefined alien function.
   [Condition of type SB-KERNEL::UNDEFINED-ALIEN-FUNCTION-ERROR]

Restarts:
 0: [RETRY] Retry SLIME interactive evaluation request.
 1: [ABORT] Return to SLIME's top level.
 2: [TERMINATE-THREAD] Terminate this thread (#<THREAD "worker" RUNNING {BD63789}>)

Backtrace:
  0: (SB-KERNEL::UNDEFINED-ALIEN-FUNCTION-ERROR)
  1: ("foreign function: #x806774B")
  2: ("foreign function: #x8052F2D")
  3: ("foreign function: #x80565C9")
  4: ((SB-PCL::FAST-METHOD CLSQL-SYS:DATABASE-CONNECT (T (EQL :MYSQL))) #<unavailable argument> #<unavailable argument> ("localhost" "test" "user" "password") :MYSQL)
  5: (CONNECT ("localhost" "test" "user" "password"))[:EXTERNAL]
  6: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CONNECT '("localhost" "test" "user" "password") :DATABASE-TYPE :MYSQL) #<NULL-LEXENV>)
  7: ((LAMBDA ()))
 --more--

我使用的是SBCL1.0.40.0,Debian6.0,clsql是使用quicklisp和MySQLv14.14安装的(尽管我怀疑这是mysql的问题)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-18 08:28:47

原来我不得不这么做

代码语言:javascript
复制
apt-get install cl-sql

尽管我已经有了libmysqlclient-dev,并且已经通过quicklisp安装了clsql (看起来它包含了所有正确的c文件),但这仍然是必要的。完成此操作后,我可以使用以下命令连接到本地mysql服务器

代码语言:javascript
复制
(connect '("localhost" "test" "user" "password") :database-type :mysql)

值得一提的是,它仍然在我的64位系统上抛出了几个警告(在我的32位机器上没有问题);使用accept重启(对不起,Xach)使它看起来处于工作状态。

详细来说,我不知道这是如何解决问题的;如果有人可以解释它,请回答,我会upvote+accept (假设您的解释是正确的)。

编辑:另一台机器上的类似问题让我沮丧了大约30分钟。这似乎是应该假设的,但如果您从裸机构建系统,请确保您安装了 gcc.如果不这样做,它会出于显而易见的原因阻止clsql-uffi编译其组件。当该过程以这种方式失败时,您将得到与问题中相同的编译错误,因此请注意您的基础知识。

票数 2
EN

Stack Overflow用户

发布于 2011-02-18 02:49:35

不要使用accept重新启动。它的意思是“即使有些事情搞砸了,也要坚持下去”,而这几乎不是你想要做的。

您是否安装了mysql开发库?你有libmysqlclient.so吗?

可以尝试的一件事是:启动一个新的sbcl并快速加载"clsql-uffi",然后跟踪clsql-uffi::find-and-load-foreign-library,然后根据跟踪输出查看(clsql:connect nil :database-type 'mysql)是否找到了您需要的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5032566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档