findLibraryFile function
Implementation
Future<String> findLibraryFile(String libName, String searchDir) async {
final libPath = p.join(searchDir, libName);
// 优先找这个文件
if (await File(libPath).exists()) return libPath;
// 特例:
// - linux: name.so.1.2.3
// - mac : name.1.2.3.dylib
// 用 name 来搜索
final name = p.basenameWithoutExtension(libName);
final files = await Directory(searchDir).list().where((file) {
return file is File && p.basename(file.path).startsWith(name);
}).toList();
if (files.isEmpty) {
throw Exception('No library files found in $searchDir for $name');
}
files.sort(
(a, b) => p.basename(a.path).length.compareTo(p.basename(b.path).length),
);
return files.first.path;
}