I'm trying to get clsql working (used to use cl-mysql, but looking at alternatives). Just attempting to play around at this point, and I'm getting stopped at connect
(connect '("localhost" "test" "user" "password") :database-type :mysql)
gets me
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--
If I follow the accept
restarts (trimmed above for brevity) all the way through, I eventually get to
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--
I'm using SBCL 1.0.40.0, Debian 6.0, clsql
was installed using quicklisp
and mysql v14.14 (although I doubt this is an issue with mysql).
It turns out I had to do
apt-get install cl-sql
This was necessary despite the fact that I already had libmysqlclient-dev
and had installed clsql
through quicklisp (which looked like it had all the correct c files with it). After doing this, I was able to connect to a local mysql server using
(connect '("localhost" "test" "user" "password") :database-type :mysql)
As a note, it still threw a couple warnings on my 64-bit system (no problems on my 32 bit machine); using the accept
restart (sorry, Xach) got it to a seemingly working state.
I have no idea how, in detail, this fixed the problem; if someone can explain it, answer and I'll upvote+accept (assuming your explanation is correct).
EDIT: Similar problem on another machine had me frustrated for about 30 minutes. It seems like this should be assumed, but if you're building a system from bare metal, make sure you install gcc
. If you don't, it prevents clsql-uffi
from compiling its components for obvious reasons. When the process fails this way, you get the same compilation error as in the question, so cover your bases.