我正在尝试让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--
我正在使用SBCL 1.0.40.0,Debian 6.0,clsql
使用quicklisp
和mysql v14.14安装(虽然我怀疑这是mysql的一个问题)。
答案 0 :(得分:2)
不要使用accept
重启。这意味着“即使事情被搞砸也要继续前进”,而且如果你想做什么的话很少。
您是否安装了mysql开发库?你有libmysqlclient.so吗?
要尝试的一件事:启动一个新的sbcl并快速加载“clsql-uffi”,然后跟踪clsql-uffi::find-and-load-foreign-library
,然后(clsql:connect nil :database-type 'mysql)
根据跟踪输出查看它是否找到了您需要的内容。 / p>
答案 1 :(得分:2)
事实证明我必须做
apt-get install cl-sql
这是必要的,尽管事实上我已经有libmysqlclient-dev
并且通过quicklisp安装了clsql
(看起来它有所有正确的c文件)。执行此操作后,我可以使用
(connect '("localhost" "test" "user" "password") :database-type :mysql)
作为一个注释,它仍然在我的64位系统上发出了几个警告(在我的32位机器上没有问题);使用accept
重新启动(对不起,Xach)让它变成了一个看似有效的状态。
我不知道如何解决这个问题;如果有人可以解释,回答,我会upvote +接受(假设你的解释是正确的)。
编辑:另一台机器上的类似问题让我感到沮丧约30分钟。这似乎应该假设,但如果您使用裸机构建系统,请确保安装gcc
。如果不这样做,它会阻止clsql-uffi
出于显而易见的原因编译其组件。当进程以这种方式失败时,您会得到与问题中相同的编译错误,因此请覆盖您的基础。