load static method
加载动态库 (自动处理平台差异)
Implementation
static DynamicLibrary load() {
if (Platform.isIOS) {
return DynamicLibrary.executable();
}
final libName = () {
if (Platform.isAndroid || Platform.isLinux) return 'libquickjs_ffi.so';
if (Platform.isMacOS) return 'libquickjs_ffi.dylib';
if (Platform.isWindows) return 'quickjs_ffi.dll';
return 'libquickjs_ffi.dylib';
}();
try {
return DynamicLibrary.open(libName);
} catch (e) {
if (Platform.isMacOS) {
final executableDir = File(Platform.resolvedExecutable).parent.path;
final possiblePaths = [
'$executableDir/../Frameworks/$libName',
'$executableDir/$libName',
// Fallback for local testing in monorepo structure
'../../fuickjs_core/macos/$libName',
'../../../fuickjs_core/macos/$libName', // In case we are deep in test folder
'build/macos/Build/Products/Debug/$libName', // Native build output?
];
for (final path in possiblePaths) {
try {
return DynamicLibrary.open(path);
} catch (_) {}
}
}
rethrow;
}
}