Hello,
i'am using the CFFI on 32-bit machines without any problem. Switching to a 64-bit platform breaks the loading of a lib.
uname -a: Linux master 2.6.8-24-smp #1 SMP Wed Oct 6 09:16:23 UTC 2004 x86_64 x86_64 x86_64 GNU/Linux
/etc/SuSE-release: SuSE Linux 9.2 (x86-64) VERSION = 9.2
sbcl: SBCL 0.9.11
library: libgslcblas.so.0 (libc6,x86-64) => /usr/lib/libgslcblas.so.0 libgslcblas.so (libc6,x86-64) => /usr/lib/libgslcblas.so libgsl.so.0 (libc6,x86-64) => /usr/lib/libgsl.so.0 libgsl.so (libc6,x86-64) => /usr/lib/libgsl.so
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; The small lisp prog: (defpackage :cffi-user (:use :common-lisp :cffi)) (in-package :cffi-user)
(pushnew #P"/usr/local/lib/" *foreign-library-directories* :test #'equal)
; alternative 1 (define-foreign-library libgslcblas (:unix (:or "libgslcblas.so.0.0.0" "libgslcblas.so.0")) (t (:default "libgslcblas"))) ; alternative 2 (define-foreign-library libgslcblas (t (:default "libgslcblas")))
(use-foreign-library libgslcblas) <---the error happens here
(define-foreign-library libgsl (:unix (:or "libgsl.so.0.9.0" "libgsl.so.0")) (t (:default "libgsl"))) (use-foreign-library libgsl)
;;;; (defcfun "gsl_sf_bessel_J0" :double (x :double)) (time (format t "~A~%" (gsl-sf-bessel-J0 5d0))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END
The error message: Unable to load foreign library: libgslcblas.so [Condition of type LOAD-FOREIGN-LIBRARY-ERROR] 0: (CFFI::HANDLE-LOAD-FOREIGN-LIBRARY-ERROR "libgslcblas.so" "Unable to load foreign library: ~A" "libgslcblas.so")
It doesn't matter if i use alternative 1 or 2.
Is it a general matter that CFFI cannot handle 64-bit libs ?
Regards Heiko