Question

J'essaie de faire fonctionner CLSQL (utilisé pour utiliser CL-Mysql, mais en regardant des alternatives). J'essaye juste de jouer à ce stade, et je m'arrête connect

(connect '("localhost" "test" "user" "password") :database-type :mysql)

me fait

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--

Si je suis le accept redémarrage (taillé au-dessus pour la concision) tout au long, j'arrive finalement à

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--

J'utilise SBCL 1.0.40.0, Debian 6.0, clsql a été installé en utilisant quicklisp et MySQL v14.14 (bien que je doute que ce soit un problème avec MySQL).

Était-ce utile?

La solution 2

Il s'avère que je devais faire

apt-get install cl-sql

C'était nécessaire malgré le fait que j'avais déjà libmysqlclient-dev et avait installé clsql via QuickLisp (qui semblait avoir tous les fichiers C corrects avec lui). Après cela, j'ai pu me connecter à un serveur MySQL local en utilisant

(connect '("localhost" "test" "user" "password") :database-type :mysql)

À titre de note, il a toujours lancé quelques avertissements sur mon système 64 bits (aucun problème sur ma machine 32 bits); en utilisant le accept Le redémarrage (désolé, Xach) l'a mis à un état de travail apparemment.

Je ne sais pas comment, en détail, cela a résolu le problème; Si quelqu'un peut l'expliquer, répondrai et j'accepterai + accepter (en supposant que votre explication est correcte).

Edit: un problème similaire sur une autre machine m'a frustré pendant environ 30 minutes. Il semble que cela devrait être supposé, mais Si vous construisez un système en métal nu, assurez-vous d'installer gcc. Si vous ne le faites pas, cela empêche clsql-uffi de la compilation de ses composants pour des raisons évidentes. Lorsque le processus échoue de cette façon, vous obtenez la même erreur de compilation que dans la question, alors couvrez vos bases.

Autres conseils

N'utilisez pas le accept redémarrer. Cela signifie «continuer même si quelque chose est foutu», et c'est rarement, voire jamais, ce que vous voulez faire.

Avez-vous installé les bibliothèques de développement MySQL? Avez-vous libmysqlclient.so?

Une chose à essayer: démarrer un nouveau SBCL et un "ClSQL-Uffi" frais, puis tracez clsql-uffi::find-and-load-foreign-library, alors (clsql:connect nil :database-type 'mysql) Pour voir s'il s'agit de trouver ce dont vous avez besoin, en fonction de la sortie de trace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top