我有一个适用于 Linux (x64) 的预编译 .so 库,我已经生成了一个用于使用 ffigen 的
ffi
接口,到目前为止一切都很好。当我尝试使用以下方式加载它时:
var libraryPath = path.join(Directory.current.absolute.path, 'lib', 'native', 'lib64', 'mylib.so');
final dylib = ffi.DynamicLibrary.open(libraryPath);
我收到错误:
ArgumentError: Failed to load dynamic library 'libsecond.so.0'
文件“libsecond.so.0”与 mylib.so 存在于同一目录中,并在运行时验证它存在,但不会加载库。
我还需要做什么来加载库?它依赖于一些外部 .so 库,这些库都存在于同一目录中。
我可以假设
ffi.DynamicLibrary.open()
正在使用libdl的以下函数:
void *dlopen(const char *filename, int flags);
如果没有给出绝对路径,则
dlopen()
从某些目录中搜索库文件。请参阅手册页了解更多详细信息。
您可以通过将想要的目录设置为LD_LIBRARY_PATH来尝试,例如:
export LD_LIBRARY_PATH=/path/to/dir:$LD_LIBRARY_PATH