我正在尝试使clsql工作(过去使用cl-mysql,但正在寻找替代方法)。在这一点上,我只是想玩玩,但我在connect被阻止了
(connect '("localhost" "test" "user" "password") :database-type :mysql)让我明白了
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重启(为简洁起见,在上面进行了修剪),我最终会得到
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的问题)。
发布于 2011-02-18 08:28:47
原来我不得不这么做
apt-get install cl-sql尽管我已经有了libmysqlclient-dev,并且已经通过quicklisp安装了clsql (看起来它包含了所有正确的c文件),但这仍然是必要的。完成此操作后,我可以使用以下命令连接到本地mysql服务器
(connect '("localhost" "test" "user" "password") :database-type :mysql)值得一提的是,它仍然在我的64位系统上抛出了几个警告(在我的32位机器上没有问题);使用accept重启(对不起,Xach)使它看起来处于工作状态。
详细来说,我不知道这是如何解决问题的;如果有人可以解释它,请回答,我会upvote+accept (假设您的解释是正确的)。
编辑:另一台机器上的类似问题让我沮丧了大约30分钟。这似乎是应该假设的,但如果您从裸机构建系统,请确保您安装了 gcc.如果不这样做,它会出于显而易见的原因阻止clsql-uffi编译其组件。当该过程以这种方式失败时,您将得到与问题中相同的编译错误,因此请注意您的基础知识。
发布于 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)是否找到了您需要的内容。
https://stackoverflow.com/questions/5032566
复制相似问题