Common lisp 如何从cffi中获取外部库的绝对路径:列出外部库?

Common lisp 如何从cffi中获取外部库的绝对路径:列出外部库?,common-lisp,cffi,Common Lisp,Cffi,假设我想创建一个公共Lisp应用程序中使用的当前动态库的转储。我如何才能得到外国图书馆的绝对路径给定的结果 如果给定的解决方案可以是可移植的操作系统,或者至少是CL实现,那就好了 经过一些调查,似乎一旦加载了库,表示该库的外部库实例的路径名插槽将被修改为指向解析的目标文件的路径,但只有当文件不在标准系统位置时,它才是绝对的。例如: (cffi:list-foreign-libraries :loaded-only t) => (#<CFFI:FOREIGN-LIBRARY LIBSD

假设我想创建一个公共Lisp应用程序中使用的当前动态库的转储。我如何才能得到外国图书馆的绝对路径给定的结果

如果给定的解决方案可以是可移植的操作系统,或者至少是CL实现,那就好了


经过一些调查,似乎一旦加载了库,表示该库的
外部库
实例的
路径名
插槽将被修改为指向解析的目标文件的路径,但只有当文件不在标准系统位置时,它才是绝对的。例如:

(cffi:list-foreign-libraries :loaded-only t)
=> (#<CFFI:FOREIGN-LIBRARY LIBSDL2 "libSDL2-2.0.so.0"> ...)
但是在这里,您可以看到路径名不是绝对的。这是因为当CFFI在内部调用
CFFI::%load foreign library
(经过一点跟踪)时,使用以下参数:

(cffi::%load-foreign-library "libSDL2-2.0.so.0" "libSDL2-2.0.so.0")
。。。实现使用系统的隐式查找机制(例如,
dlopen
)找到目标文件


cffi::%load-foreign-library
在不同平台上的实现方式不同,例如,在SBCL的情况下,
dlopen
获得的指针存储在
SB-SYS:*共享对象*
中的对象中,但据我所知,没有可移植的方法来检索从中加载的库的路径。

谢谢,这是我得出的类似结论。为了给大家提供一些背景知识,我以一种不可移植的方式解决了以下问题:
(cffi::%load-foreign-library "libSDL2-2.0.so.0" "libSDL2-2.0.so.0")