From 3a16c86036d66aaee80973af8870b56f4ac776d1 Mon Sep 17 00:00:00 2001 From: Kartik Singh Date: Thu, 5 Dec 2024 08:49:33 -0800 Subject: [PATCH] dlopen fasl lib on Linux --- src/fasl-lib.lisp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/fasl-lib.lisp b/src/fasl-lib.lisp index 77023fec..88596799 100644 --- a/src/fasl-lib.lisp +++ b/src/fasl-lib.lisp @@ -89,6 +89,8 @@ symbols defined in SYSTEMS. The C functions to perform :when (typep system 'asdf:require-system) :do (format stream "~v@{ ~}lisp_require(\"~A\");~%" indent-size system-name)))) (with-open-file (stream (uiop:merge-pathnames* *fasl-loader-filename* directory) :direction :output :if-exists :supersede) + #+linux + (format stream "#include ~%") #+win32 (format stream "#include ~%") (format stream "#include \<~A.h\>~%" *base-library-name*) @@ -105,6 +107,11 @@ symbols defined in SYSTEMS. The C functions to perform (progn (let ((function-name (fasl-library-load-function-name library))) (format stream "__attribute__((constructor))~%static void ~A(void) {~%" function-name) + #+linux + (progn + (format stream " Dl_info info;~%") + (format stream " dladdr(~A_fasl, &info);~%" (system-c-name (first systems))) + (format stream " dlopen(info.dli_fname, RTLD_NOW | RTLD_GLOBAL);~%")) #+win32 (let ((buf-size 1024)) (format stream " char dll_path[~D];~%" buf-size)