Вы пытаетесь сократить поведение DllImport
с помощью явного dlopen
- то есть, используя dlopen
, чтобы указать путь, который должен использоваться DllImport
.Проблема в том, что соединение DllImport
выполняется внутренне со временем выполнения C#
до вызова dlopen
.
dlopen
никогда не заглядывает.
Чтобы использовать DllImport
без пути, вам нужно полагаться на поведение поиска по умолчанию, которое определяется местоположением, указанным переменными среды $LD_LIBRARY_PATH
, $DYLD_LIBRARY_PATH
, текущим рабочим каталогом,$DYLD_FALLBACK_LIBRARY_PATH
.
Так, например:
env DYLD_LIBRARY_PATH=path/to/ mono test.exe
, который запускает моно-интерпретатор с путем, предварительно загруженным path/to
, что позволяет ему найти dylib
в этомlocation.
Другие решения включают перемещение библиотеки в каталог с исполняемым файлом, создание символической ссылки на библиотеку в текущем рабочем каталоге.