Dart ffi 加载具有依赖项的 DynamicLibrary

问题描述 投票:0回答:1

我有一个适用于 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 库,这些库都存在于同一目录中。

linux flutter dart ffi dart-ffi
1个回答
0
投票

我可以假设

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
© www.soinside.com 2019 - 2024. All rights reserved.