mach-o 文件,但在 Flutter 中是不兼容的架构(有“arm64”,需要“x86_64”)

arc*_*fox 35 dart flutter dart-ffi

执行dart run ffigen出现如下错误:

\n
Unhandled exception:\nInvalid 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'))\n#0      _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:12:43)\n#1      new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:23:12)\n#2      initializeGlobals (package:ffigen/src/header_parser/data.dart:41:33)\n#3      initParser (package:ffigen/src/header_parser/parser.dart:48:3)\n#4      parse (package:ffigen/src/header_parser/parser.dart:22:3)\n#5      main (package:ffigen/src/executables/ffigen.dart:54:19)\n#6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)\n#7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)\n
Run Code Online (Sandbox Code Playgroud)\n

我检查了我的 Flutter 环境:

\n
\xe2\x9d\xaf file /Users/bruce/dev_tools/flutter/bin/cache/dart-sdk/bin/dart\n/Users/bruce/dev_tools/flutter/bin/cache/dart-sdk/bin/dart: Mach-O 64-bit executable x86_64\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行brew install llvm安装 llvm 时,我得到的是 arm64 的库,我认为这是导致错误的原因:

\n
\xe2\x9d\xaf lipo -info /Users/bruce/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib\nNon-fat file: /Users/bruce/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib is architecture: arm64\n
Run Code Online (Sandbox Code Playgroud)\n

Flutter SDK好像没有针对Apple Silicon的版本,那么如何解决这个问题呢?

\n
\xe2\x9d\xaf flutter doctor -v\n[\xe2\x9c\x93] Flutter (Channel stable, 2.8.1, on macOS 12.3 21E230 darwin-arm, locale\n    zh-Hans-CN)\n    \xe2\x80\xa2 Flutter version 2.8.1 at /Users/bruce/dev_tools/flutter\n    \xe2\x80\xa2 Upstream repository https://github.com/flutter/flutter.git\n    \xe2\x80\xa2 Framework revision 77d935af4d (4 months ago), 2021-12-16 08:37:33 -0800\n    \xe2\x80\xa2 Engine revision 890a5fca2e\n    \xe2\x80\xa2 Dart version 2.15.1\n    \xe2\x80\xa2 Pub download mirror http://10.141.64.130:8080\n\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version\n    32.1.0-rc1)\n    \xe2\x80\xa2 Android SDK at /Users/bruce/Library/Android/sdk\n    \xe2\x80\xa2 Platform android-32, build-tools 32.1.0-rc1\n    \xe2\x80\xa2 Java binary at: /Applications/Android\n      Studio.app/Contents/jre/Contents/Home/bin/java\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)\n    \xe2\x80\xa2 All Android licenses accepted.\n\n[\xe2\x9c\x93] Xcode - develop for iOS and macOS (Xcode 13.3)\n    \xe2\x80\xa2 Xcode at /Applications/Xcode.app/Contents/Developer\n    \xe2\x80\xa2 CocoaPods version 1.11.3\n\n[\xe2\x9c\x93] Chrome - develop for the web\n    \xe2\x80\xa2 Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome\n\n[\xe2\x9c\x93] Android Studio (version 2021.1)\n    \xe2\x80\xa2 Android Studio at /Applications/Android Studio.app/Contents\n    \xe2\x80\xa2 Flutter plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/9212-flutter\n    \xe2\x80\xa2 Dart plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/6351-dart\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试安装Arm平台的Dart SDK,但仍然不起作用,使用独立的Dart环境,出现以下错误:

\n
\xe2\x9d\xaf /Users/bruce/dev_tools/dart/bin/dart run ffigen\nThe Flutter SDK is not available.\n#0      BoundSdkSource.getDirectory (package:pub/src/source/sdk.dart:125:7)\n#1      SystemCache.load (package:pub/src/system_cache.dart:113:52)\n#2      Entrypoint._assertLockFileUpToDate (package:pub/src/entrypoint.dart:599:19)\n#3      Entrypoint.assertUpToDate (package:pub/src/entrypoint.dart:525:7)\n#4      getExecutableForCommand (package:pub/src/executable.dart:304:16)\n#5      RunCommand.run (package:dartdev/src/commands/run.dart:232:32)\n#6      CommandRunner.runCommand (package:args/command_runner.dart:209:27)\n#7      DartdevRunner.runCommand (package:dartdev/dartdev.dart:232:30)\n#8      CommandRunner.run.<anonymous closure> (package:args/command_runner.dart:119:25)\n#9      new Future.sync (dart:async/future.dart:296:31)\n#10     CommandRunner.run (package:args/command_runner.dart:119:14)\n#11     runDartdev (package:dartdev/dartdev.dart:67:29)\n#12     main (file:///opt/s/w/ir/cache/builder/sdk/pkg/dartdev/bin/dartdev.dart:11:9)\n#13     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:293:32)\n#14     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 44

在M1 mac上运行,这两个命令解决了我的问题。

$ arch -arm64 brew install llvm

$ sudo gem install ffi
Run Code Online (Sandbox Code Playgroud)


小智 7

这是对我有用的步骤,

  1. 使用自制程序 x86_64 版本安装 llvm arch -x86_64 /usr/local/homebrew/bin/brew install llvm

  2. 安装 x86-64 版本的 ffi sudo arch -x86_64 gem install ffi

  3. 删除pods目录和目录PodfileiOS

  4. 使缓存无效并重新启动android studio


小智 5

我曾经想过这个,这太糟糕了!这里的问题是你如何安装 LLVM,LLVM 本身默认通过 Home-brew 安装为 ARM64,但你应该安装它的 X86_64 版本。要解决请尝试以下操作:

  1. 卸载当前的 LLVM:brew uninstall llvmss
  2. 确保安装了 x86_64 的自制软件,如本文中所示
  3. 然后使用 homebrew x86 版本安装:arch -x86_64 /usr/local/homebrew/bin/brew install llvm

然后你 ffi gen 就可以工作了。


mkm*_*str 5

此错误出现在配备 Apple Silicon M1 芯片的 MacBook 上。仅当通过配置为使用 Rosetta 打开的终端运行命令时,才会出现此问题。

我所做的解决方法是:

  1. 克隆终端应用程序
  2. 将其重命名为“终端 x86_64”
  3. 通过右键单击+“获取信息”获取信息
  4. 取消选中“用 Rosetta 打开”

因此,每次我想运行导致此错误的命令时,我都会使用“Terminal x86_64”来运行它,你猜怎么着?有用。

  • 无论终端是否选中“使用 Rosetta 打开”选项,它仍然会发生。 (2认同)