Libdl
Libdl.dlopen ── 関数
dlopen(libfile::AbstractString [, flags::Integer]; throw_error:Bool = true)
共有ライブラリを読み込み、不透明1なハンドルを返します。
定数 Libdl.dlext が与える拡張子 (.so, .dll, .dylib のいずれか) は dlopen の文字列引数 libfile から省略でき、省略すると自動で付け足されます。libfile が絶対パスでないときは、システムのロードパスおよび配列 DL_LOAD_PATH にあるパスで libfile が検索されます。
省略可能な引数 flag には RTLD_LOCAL, RTLD_GLOBAL, RTLD_LAZY, RTLD_NOW, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_FIRST をビット単位の OR でゼロ個以上繫いだものを指定できます。このフラグは POSIX (および GNU libc や MacOS) の dlopen の対応するフラグに変換されますが、現在のプラットフォームで利用できない機能を指定したときは無視されます。
デフォルトの flags はプラットフォームごとに異なります。dlopen が使うデフォルトの flags は MacOS では RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL であり、その他のプラットフォームでは RTLD_LAZY|RTLD_DEEPBIND|RTLD_LOCAL です。このフラグの重要な利用法が、動的ライブラリローダーがライブラリの参照をエクスポートされたシンボルにバインドするときの振る舞いの切り替えと、バインドされる参照をプロセスローカルスコープとグローバルスコープのどちらに入れるかの指定です。例えば RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL とすればライブラリのシンボルは他の共有ライブラリから利用できるようになるので、共有ライブラリ間に依存関係がある状況で役立ちます。
指定されたライブラリが見つからないと、このメソッドはエラーを送出します。ただしキーワード引数 throw_error が false の場合は nothing を返します。
Libdl.dlopen_e ── 関数
Libdl.RTLD_NOW ── 定数
Libdl.dlsym ── 関数
Libdl.dlsym_e ── 関数
dlsym_e(handle, sym)
共有ライブラリハンドルからシンボルを検索します。失敗するとエラーを送出せずに C_NULL を返します。dlsym(handle, sym; throw_error=false) があるので、現在このメソッドは非推奨です。
Libdl.dlclose ── 関数
dlclose(::Nothing)
このメソッドは非常によく使われる次のパターンのために定義されます:
try
hdl = dlopen(library_name)
... 処理を行う
finally
dlclose(hdl)
end
Nothing 型のパラメータを受け取る dlclose() を定義しておけば、ユーザーは library_name が見つかったかどうかに応じて処理を切り替える必要がなくなります。
Libdl.dlext ── 定数
Libdl.dllist ── 関数
Libdl.dlpath ── 関数
dlpath(libname::Union{AbstractString, Symbol})
ライブラリ libname の完全パスを取得します。
例
julia> dlpath("libjulia")
Libdl.find_library ── 関数
find_library(names, locations)
names に含まれるライブラリの名前を順に検索し、最初に見つかったライブラリの名前を返します。検索はリスト locations にあるパス・DL_LOAD_PATH・システムライブラリパスの順に行われ、dlopen に成功したパスが見つかったものとみなされます。検索に成功するとリストにある名前が返りますが、そのとき locations にあるパスが先頭に付く場合もあります。この文字列を global const に代入すれば、以降の ccall でライブラリ名として利用できます。検索が失敗すると空文字列が返ります。