-;; Taken from foreign.lisp in the CMUCL tree, but modified to delay
-;; resolving of symbols until they are used
-(defun load-dso (file)
- (system::ensure-lisp-table-opened)
- ; rtld global: so it can find all the symbols previously loaded
- ; rtld lazy: that way dlopen will not fail if not all symbols are defined.
- (let ((filename (namestring file)))
- (format t ";;; Loading shared library ~A ...~%" filename)
- (let ((sap (system::dlopen filename (logior system::rtld-lazy system::rtld-global))))
- (cond ((zerop (system:sap-int sap))
- (let ((err-string (system::dlerror)))
-
- ;; For some reason dlerror always seems to return NIL,
- ;; which isn't very informative.
- (error "Can't open object ~S: ~S" file err-string)))
- ((null (assoc sap system::*global-table* :test #'system:sap=))
- (setf system::*global-table* (acons sap file system::*global-table*))
- t)
- (t nil)))))
+
+(defun load-dso (filename)
+ #+sbcl(sb-alien:load-shared-object filename)
+ #+cmu(system::load-object-file filename))