【发布时间】:2022-06-21 08:30:33
【问题描述】:
执行dart run ffigen得到如下错误:
Unhandled exception:
Invalid argument(s): Failed to load dynamic library '/Users/bruce/homebrew/opt/llvm/lib/libclang.dylib': dlopen(/Users/bruce/homebrew/opt/llvm/lib/libclang.dylib, 0x0001): tried: '/Users/bruce/homebrew/opt/llvm/lib/libclang.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/Users/bruce/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
#0 _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:12:43)
#1 new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:23:12)
#2 initializeGlobals (package:ffigen/src/header_parser/data.dart:41:33)
#3 initParser (package:ffigen/src/header_parser/parser.dart:48:3)
#4 parse (package:ffigen/src/header_parser/parser.dart:22:3)
#5 main (package:ffigen/src/executables/ffigen.dart:54:19)
#6 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
我检查了我的 Flutter 环境:
❯ file /Users/bruce/dev_tools/flutter/bin/cache/dart-sdk/bin/dart
/Users/bruce/dev_tools/flutter/bin/cache/dart-sdk/bin/dart: Mach-O 64-bit executable x86_64
当我运行brew install llvm 安装 llvm 时,我得到的是 arm64 的库,我认为这是导致错误的原因:
❯ lipo -info /Users/bruce/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib
Non-fat file: /Users/bruce/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib is architecture: arm64
Flutter SDK 好像没有 Apple Silicon 的版本,请问如何解决?
❯ flutter doctor -v
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.3 21E230 darwin-arm, locale
zh-Hans-CN)
• Flutter version 2.8.1 at /Users/bruce/dev_tools/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 77d935af4d (4 months ago), 2021-12-16 08:37:33 -0800
• Engine revision 890a5fca2e
• Dart version 2.15.1
• Pub download mirror http://10.141.64.130:8080
[✓] Android toolchain - develop for Android devices (Android SDK version
32.1.0-rc1)
• Android SDK at /Users/bruce/Library/Android/sdk
• Platform android-32, build-tools 32.1.0-rc1
• Java binary at: /Applications/Android
Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 13.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• CocoaPods version 1.11.3
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2021.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
???? https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
???? https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
我尝试为 Arm 平台安装 Dart SDK,但仍然无法正常工作,使用独立的 Dart 环境,我收到以下错误:
❯ /Users/bruce/dev_tools/dart/bin/dart run ffigen
The Flutter SDK is not available.
#0 BoundSdkSource.getDirectory (package:pub/src/source/sdk.dart:125:7)
#1 SystemCache.load (package:pub/src/system_cache.dart:113:52)
#2 Entrypoint._assertLockFileUpToDate (package:pub/src/entrypoint.dart:599:19)
#3 Entrypoint.assertUpToDate (package:pub/src/entrypoint.dart:525:7)
#4 getExecutableForCommand (package:pub/src/executable.dart:304:16)
#5 RunCommand.run (package:dartdev/src/commands/run.dart:232:32)
#6 CommandRunner.runCommand (package:args/command_runner.dart:209:27)
#7 DartdevRunner.runCommand (package:dartdev/dartdev.dart:232:30)
#8 CommandRunner.run.<anonymous closure> (package:args/command_runner.dart:119:25)
#9 new Future.sync (dart:async/future.dart:296:31)
#10 CommandRunner.run (package:args/command_runner.dart:119:14)
#11 runDartdev (package:dartdev/dartdev.dart:67:29)
#12 main (file:///opt/s/w/ir/cache/builder/sdk/pkg/dartdev/bin/dartdev.dart:11:9)
#13 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:293:32)
#14 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
【问题讨论】:
-
你的 Flutter 版本几岁了?尝试颤振医生 -v 并更新问题
-
要运行 ffigen,您只需要 Dart SDK,因此请考虑从此处 (dart.dev/get-dart/archive) 获取 2.16 Arm 并将其安装在单独的文件夹中。
-
@RichardHeap 我更新了问题描述,好像
ffigen不能使用独立的Dart环境执行。 -
它绝对可以在没有 Flutter 的情况下工作 - 刚刚测试过:
D:\source\ffixyz>dart run ffigen --config config.yaml和D:\source\ffixyz>dart --version=>Dart SDK version: 2.16.1 (stable)