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;
  }
}