トッド・ゲイリーはかつて LibraryLoad
と言いました 必要な依存ライブラリをプリロードするためのものです。たとえば、数値ライブラリを必要とする関数を作成する場合、ライブラリ内の関数を呼び出す前にこれをロードできます。
WolframLibrary ライブラリをプリロードする必要はありません 関数をロードすることによって暗黙的にロードするため、開発したことになります。
したがって、問題の解決策は LibraryFunctionLoad
を呼び出す必要があると思います あなたが開発している機能の1つに、その後 LibraryUnload
さらに、すべての関数を LibraryFunctionUnload
でアンロードする必要があります ライブラリをアンロードする前に。
(元の質問の linux タグにもかかわらず、Windows ユーザーにとって共有する価値のある情報です。)
このコメントが述べたように、Windows プラットフォームには追加の問題があります。解決策がある限り、ここで説明します。
LibraryUnload
Windows での障害の問題
「スタンドアロン」ライブラリ myLib.dll があるとします。 Mathematica や LibraryLink とは関係ありません。次に、libLink.dll があります。 myLib を使用する また、LibraryLink を通じて Mathematica に関数を提供します。
libLink として myLib に依存 myLib をプリロードしようとするかもしれません libLink をロードする前に 、問題なく動作します:
LibraryLoad["myLib.dll"]
myfunc = LibraryFunctionLoad["libLink.dll", ... ]
しかし、Windows では、
でアンロードしようとすると、LibraryUnload["libLink.dll"]
LibraryUnload["myLib.dll"]
前者は成功しますが、後者は失敗してエラー メッセージが表示されます
LibraryFunction::unloadlib: The library myLib.dll cannot be unloaded.
Process Explorer などのツールを使用すると、ファイルのハンドルがカーネルによって解放されていないことがわかります。
解決策
説明されている問題は、myLib を開発しているときにイライラすることがあります。 . myLib を再コンパイルする前に毎回カーネルを強制終了する必要があります . ilian (私のコードを非常に寛大にレビューし、問題を調査してくれました) によって発見され、親切に共有された解決策は、
myLib を手動でプリロードしない LibraryLoad
で
代わりに、OS 環境を変更して、Windows がすべての依存ライブラリを見つけて自動的に管理できるようにすることができます。
SetEnvironment["PATH" -> Environment["PATH"] <> ";" <> "path_to_folder_of_myLib.dll"]
myfunc = LibraryFunctionLoad["libLink.dll", ... ]
アンロードは次のように簡単になります:
LibraryUnload["libLink.dll"]
その後、myLib.dll への参照が他にない場合 、編集可能になります。