2011-02-17 3 views
2

clsql을 작동 시키려고합니다. (cl-mysql을 사용했지만 다른 방법을 찾고있었습니다). 내가 통해 (간결함을 위해 위의 손질)에 accept 다시 시작 모든 방법을 따른다면 바로이 시점에서 주위를 재생하려고, 나는 connectSBCL에서 clsql 문제가 발생했습니다.

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

를 가져옵니다 나는 결국, clsqlquicklisp를 사용하여 설치 한 내가 SBCL 1.0.40.0, 데비안 6.0 사용하고 있습니다

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

에 도착하고 mysql v14.14 (비록 이것이 mysql의 문제인지는 모르지만).

답변

2

내가

apt-get install cl-sql 

은 이미 libmysqlclient-dev이 있고 (그것이 모든 올바른 C 파일을했다처럼 보였다있는) quicklisp 통해 clsql를 설치 한 사실에도 불구 필요하다고해야했다 밝혀졌습니다. 이 일 후에, 나는 아직도 (내 32 비트 시스템에서 문제없이) 내 64 비트 시스템에 대한 몇 가지 경고를 던졌다 참고로

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

를 사용하여 로컬 MySQL 서버에 접속 할 수 있었다; accept restart (미안, Xach)를 사용하면 겉으로보기에는 작동하는 상태가되었습니다.

나는이 문제를 어떻게 해결했는지 상세히 알지 못한다. 누군가가 설명 할 수 있다면, 대답을하고 upvote + accept (당신의 설명이 맞다고 가정).

편집 : 다른 컴퓨터에서 비슷한 문제가 발생하면 약 30 분 동안 좌절감을 느낍니다. 이것이 가정되어야하는 것처럼 보이지만, 베어 메탈에서 시스템을 구축하려면 gcc을 설치해야합니다. 그렇지 않으면 명백한 이유로 clsql-uffi이 해당 구성 요소를 컴파일하지 못합니다. 이 방법으로 프로세스가 실패하면 질문과 같은 컴파일 오류가 발생하므로 기본을 다루십시오.

+1

일반적으로 데비안은 CL 라이브러리를 혼란스럽고 문제를 해결하기 힘든 방법으로 수정합니다. 나는 데비안 시스템을 사용하지만, Lisp 라이브러리와 구현을 위해, 나는 업스트림이나 Quicklisp에서 모든 것을 얻는다. 정말로 설명이 아니라, 미안. – Xach

2

다시 시작 accept을 사용하지 마십시오. "무언가가 엉망이더라도 계속해라"는 의미이며, 당신이하고 싶은 일이 거의 없다는 것을 의미합니다.

mysql 개발 라이브러리가 설치되어 있습니까? libmysqlclient.so가 있습니까?

신선한 sbcl을 시작하고 "clsql-uffi"를 quickload 한 다음 을 추적 한 다음 (clsql:connect nil :database-type 'mysql)을 추적하여 추적 출력을 기반으로 필요한 항목을 찾고 있는지 확인하십시오.

+0

'libmysqlclient-dev'를 설치했는데'find -name libmysqlclient.so'는'/ usr/lib /'에 일치하는 것을 반환합니다. 깨끗한 SBCL에서'clsql-uffi'를 Qickloading하면 위와 같은 오류가 발생합니다 ('uffi'가 성공적으로 실행되고'clsql_uffi'를 실행하면'System not found' 오류가 발생합니다.)'clsql-uffi'를 실행하면 'clsql_uffi', 그것은'CLSQL-UFFI : ATOL64'가 정의되지 않았다는 것을 알려주는 에러입니다). – Inaimathi

+0

'clsql-uffi-loader.lisp'을 수동으로로드해도 오류가 발생합니다. '외부 라이브러리 "clsql_uffi"를로드 할 수 없습니다. (검색된 CLSQL-SYS : * FOREIGN-LIBRARY-SEARCH-PATHS *)'. CLSQL-SYS : * FOREIGN-LIBRARY-SEARCH-PATHS *는'(#P "/ home/inaimathi/quicklisp/dists/quicklisp/software/clsql-20101207-git/uffi /") 그 디렉토리에는'clsql_uffi' 파일'lib','c' 및'dll'이 들어 있습니다). 나는 작고 분명한 뭔가를 놓치고 있다는 느낌을 받는다. – Inaimathi