dart mach-o文件,但在Flutter中是不兼容的体系结构(具有“arm 64”,需要“x86_64”)

inn6fuwd  于 2022-12-06  发布在  Mac
关注(0)|答案(7)|浏览(318)

执行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)
jxct1oxe

jxct1oxe1#

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

$ arch -arm64 brew install llvm

$ sudo gem install ffi
oug3syen

oug3syen2#

此错误出现在配备Apple Silicon M1芯片的MacBook上。仅当通过配置为使用Rosetta打开的终端运行命令时,才会出现此问题。
我的解决方法是:
1.克隆终端应用程序
1.将其重命名为“Terminal x86_64”
1.通过右键单击+“获取信息”获取信息
1.未选中“使用Rosetta打开”
所以,每次我想运行一个导致这个错误的命令时,我都会使用“终端x86_64”来运行它,你猜怎么着?它工作了。

3zwjbxry

3zwjbxry3#

我已经通过了这个想法,这是可怕的!这里的问题是你如何安装LLVM,LLVM本身安装通过自制默认为ARM 64,但你应该已经安装了X86_64版本的它.要解决这个尝试:
1.卸载当前LLVM:brew uninstall llvm不 rust 钢
1.确保安装了自制软件的x86_64,如this medium article所示
1.然后安装homebrew x86版本:arch -x86_64 /usr/local/homebrew/bin/brew install llvm
那你的ffi gen就管用了。

vngu2lb8

vngu2lb84#

以下是对我有效的步骤,
1.使用自制x86_64版本arch -x86_64 /usr/local/homebrew/bin/brew install llvm安装llvm
1.为x86-64版本sudo arch -x86_64 gem install ffi安装ffi
1.删除pods目录和iOS目录中的Podfile
1.使缓存无效并重新启动android studio

zf9nrax1

zf9nrax15#

多亏了理查德·希普的建议,我解决了这个问题!
作为一个Flutter项目,你不能直接对项目目录执行dart命令,因为在执行flutter pub get之后已经存在一些缓存,先清空包缓存,然后执行dart pub get,就可以了。

kyvafyod

kyvafyod6#

uamqp库出现同样的导入错误
导入错误:我的意思是说,我的意思是说,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思已尝试:"/Users/maheshwaran/Documents/newenv/lib/python3.10/site-packages/uamqp/c_uamqp.cpython-310-darwin.so "(机器运行文件,但架构不兼容(具有(x86_64),需要(arm64e))
我通过运行以下命令解决了此导入错误:
1.正在卸载uamqp库:
pip uninstall uamqp
1.为arm64架构设置ARCHFLAGS,不使用缓存,以便下载适合arm64架构的相应库。
ARCHFLAGS="-arch arm64" pip install uamqp --compile --no-cache-dir
希望这对你也有帮助!!

lg40wkob

lg40wkob7#

如果您在Rails中的Nokogiri gem中看到此问题,请移除

nokogiri (1.13.6-arm64-darwin)
      racc (~> 1.4)

从你宝石文件中。2锁定然后做一个bundle install

相关问题