-(defun load-shared-object (pathname)
- (let ((namestring (ensure-namestring pathname)))
- #+sbcl(sb-alien:load-shared-object namestring)
- #+cmu(ext:load-foreign namestring)
- #+clisp
- (unless (find namestring *loaded-libraries* :test #'equal)
+(defun load-shared-object (pathname &optional (absolute-p t))
+ (let* ((namestring (ensure-namestring pathname))
+ (directory (namestring (pathname-sans-name+type namestring)))
+ (name+type (subseq namestring (length directory))))
+ #+sbcl
+ (progn
+ (sb-alien:load-shared-object namestring)
+ (unless absolute-p
+ (let ((shared-object (find namestring sb-alien::*shared-objects*
+ :key #'sb-alien::shared-object-file
+ :test #'equal)))
+ (setf (sb-alien::shared-object-file shared-object) name+type))))
+ #+cmu
+ (progn
+ (ext:load-foreign namestring)
+ (unless absolute-p
+ (let ((shared-object (rassoc namestring system::*global-table*
+ :test #'equal)))
+ (setf (cdr shared-object) name+type))))
+ #+clisp
+ (progn