Dynamic Linker

Dynamic Linker

Libdl.dlopenFunction.
dlopen(libfile::AbstractString [, flags::Integer]; throw_error:Bool = true)

加载共享库,返回不透明的句柄.

可以从libfile字符串中省略由常量dlext.so.dll.dylib )给出的扩展名,因为如果需要,它会自动附加. 如果libfile不是绝对路径名,那么将在数组DL_LOAD_PATH中的路径中搜索libfile ,然后是系统加载路径.

可选标志参数是RTLD_LOCALRTLD_GLOBALRTLD_LAZYRTLD_NOWRTLD_NODELETERTLD_NOLOADRTLD_DEEPBINDRTLD_FIRST的按位或零或零以上. 如果可能的话,它们将转换为POSIX(和/或GNU libc和/或MacOS)dlopen命令的相应标志,或者如果指定的功能在当前平台上不可用,则将其忽略. 默认标志是特定于平台的. 在MacOS上,默认的dlopen标志是RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL而在其他平台上,默认的RTLD_LAZY|RTLD_DEEPBIND|RTLD_LOCALRTLD_LAZY|RTLD_DEEPBIND|RTLD_LOCAL . 这些标志的一个重要用法是为动态库加载器将库引用绑定到导出的符号以及将绑定的引用放入本地或全局范围时指定非默认行为. 例如, RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL允许在其他共享库中使用该库的符号,以解决共享库之间存在依赖性的情况.

如果找不到该库,则该方法将引发错误,除非将关键字参数throw_error设置为false ,在这种情况下,此方法将nothing返回nothing .

source
Libdl.dlopen_eFunction.
dlopen_e(libfile::AbstractString [, flags::Integer])

dlopen相似,除了返回C_NULL而不引发错误. 现在不推荐使用此方法,而推荐使用dlopen(libfile::AbstractString [, flags::Integer]; throw_error=false) .

source
Libdl.RTLD_NOWConstant.
RTLD_DEEPBIND
RTLD_FIRST
RTLD_GLOBAL
RTLD_LAZY
RTLD_LOCAL
RTLD_NODELETE
RTLD_NOLOAD
RTLD_NOW

dlopen枚举常量. 有关详细信息,请参见您的平台手册页(如果适用).

source
Libdl.dlsymFunction.
dlsym(handle, sym)

从共享库句柄中查找符号,成功时返回可调用函数指针.

source
Libdl.dlsym_eFunction.
dlsym_e(handle, sym)

从共享库句柄中查找C_NULL ,查找失败时静默返回C_NULL . 现在不推荐使用此方法,而推荐使用dlsym(handle, sym; throw_error=false) .

source
Libdl.dlcloseFunction.
dlclose(handle)

关闭句柄引用的共享库.

source
dlclose(::Nothing)

对于非常常见的模式使用模式

try
    hdl = dlopen(library_name)
    ... do something
finally
    dlclose(hdl)
end

我们定义了一个dlclose()方法,该方法接受Nothing类型的参数,这样,在未找到library_name的情况下,用户代码不必更改其行为.

source
Libdl.dlextConstant.
dlext

当前平台上动态库(例如dll,dylib等)的文件扩展名.

source
Libdl.dllistFunction.
dllist()

返回当前在Vector{String}加载的动态库的路径.

source
Libdl.dlpathFunction.
dlpath(handle::Ptr{Cvoid})

给定dlopen的库handle ,返回完整路径.

source
dlpath(libname::Union{AbstractString, Symbol})

获取库libname的完整路径.

Example

julia> dlpath("libjulia")
source
Libdl.find_libraryFunction.
find_library(names, locations)

locations列表中的路径DL_LOAD_PATH或系统库路径(按顺序)中的names中搜索第一个库,可以成功对其进行dlopen. 成功后,返回值将是名称之一(可能以位置中的路径之一作为前缀). 可以将此字符串分配给global const并在以后的ccall用作库名. 失败时,它将返回空字符串.

source
Base.DL_LOAD_PATHConstant.
DL_LOAD_PATH

调用dlopen ,将在系统位置搜索有效的库句柄之前,先按顺序搜索此列表中的路径.

source

by  ICOPY.SITE