在我的 React Native 项目中使用
vision-camera-code-scanner
包时遇到构建错误。
速记错误是:
架构 x86_64 的未定义符号
完整错误如下:
ld: warning: ignoring file /XXXXXXXXXXXXXXXXXXX/Build/Products/Debug-iphonesimulator/vision-camera-code-scanner/libvision-camera-code-scanner.a, building for iOS Simulator-x86_64 but attempting to link with file built for iOS Simulator-arm64
Undefined symbols for architecture x86_64:
Undefined symbols for architecture x86_64:
"_GPBClearOneof", referenced from:
_MLKITx_EPTFlagValue_ClearValueOneOfCase in MLKitCommon(FlagValues.pbobjc.o)
_MLKITx_PHENORegistrationInfo_ClearPackageVersionOneOfCase in MLKitCommon(RegistrationInfo.pbobjc.o)
_MLKITx_PHENORegistrationInfo_ClearApplicationInfoOneOfCase in MLKitCommon(RegistrationInfo.pbobjc.o)
_MLKITx_CLCCCounter_ClearCounterIdOneOfCase in MLKitCommon(Counters.pbobjc.o)
"_GULLogBasic", referenced from:
_MLKLog in MLKitCommon(MLKLogger.o)
"_OBJC_CLASS_$_GDTCORTransport", referenced from:
objc-class-ref in MLKitCommon(MLKFirelogTransport.o)
"_OBJC_CLASS_$_GPBCodedOutputStream", referenced from:
objc-class-ref in MLKitCommon(CCTLogOutputStream.o)
"_OBJC_CLASS_$_GPBDescriptor", referenced from:
objc-class-ref in MLKitCommon(Experiments.pbobjc.o)
objc-class-ref in MLKitCommon(Metalog.pbobjc.o)
objc-class-ref in MLKitCommon(FlatFile.pbobjc.o)
objc-class-ref in MLKitCommon(Clientanalytics.pbobjc.o)
objc-class-ref in MLKitCommon(FirebaseMlSdk.pbobjc.o)
objc-class-ref in MLKitCommon(UploaderState.pbobjc.o)
objc-class-ref in MLKitCommon(DeviceExperimentIds.pbobjc.o)
...
"_OBJC_CLASS_$_GPBEnumArray", referenced from:
objc-class-ref in MLKitBarcodeScanning
objc-class-ref in MLKitVision(GMVLogger.o)
"_OBJC_CLASS_$_GPBEnumDescriptor", referenced from:
objc-class-ref in MLKitCommon(Experiments.pbobjc.o)
objc-class-ref in MLKitCommon(FlatFile.pbobjc.o)
objc-class-ref in MLKitCommon(Clientanalytics.pbobjc.o)
objc-class-ref in MLKitCommon(FirebaseMlSdk.pbobjc.o)
objc-class-ref in MLKitCommon(Barhopper.pbobjc.o)
objc-class-ref in MLKitCommon(IosAccessibilityState.pbobjc.o)
objc-class-ref in MLKitCommon(PhenotypeLog.pbobjc.o)
...
"_OBJC_CLASS_$_GPBFileDescriptor", referenced from:
objc-class-ref in MLKitCommon(Experiments.pbobjc.o)
objc-class-ref in MLKitCommon(Metalog.pbobjc.o)
objc-class-ref in MLKitCommon(FlatFile.pbobjc.o)
objc-class-ref in MLKitCommon(Clientanalytics.pbobjc.o)
objc-class-ref in MLKitCommon(FirebaseMlSdk.pbobjc.o)
objc-class-ref in MLKitCommon(UploaderState.pbobjc.o)
objc-class-ref in MLKitCommon(DeviceExperimentIds.pbobjc.o)
...
"_OBJC_CLASS_$_GPBInt32Array", referenced from:
objc-class-ref in MLKitCommon(CCTClearcutLogEvent.o)
"_OBJC_CLASS_$_GPBMessage", referenced from:
_OBJC_CLASS_$_MLKITx_EXHParam in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHParam_ExtensionValue in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHDeviceAccount in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHScope in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHParamPartition in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHCrossAppDescriptor in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHConfigurationTier in MLKitCommon(Experiments.pbobjc.o)
...
"_OBJC_CLASS_$_GPBRootObject", referenced from:
_OBJC_CLASS_$_MLKITx_EXHExperimentsRoot in MLKitCommon(Experiments.pbobjc.o)
_OBJC_CLASS_$_MLKITx_CADPMetalogRoot in MLKitCommon(Metalog.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EPIFlatFileRoot in MLKitCommon(FlatFile.pbobjc.o)
_OBJC_CLASS_$_MLKITx_CADPClientanalyticsRoot in MLKitCommon(Clientanalytics.pbobjc.o)
_OBJC_CLASS_$_MLKITx_FBMLFirebaseMlSdkRoot in MLKitCommon(FirebaseMlSdk.pbobjc.o)
_OBJC_CLASS_$_MLKITx_CCTUploaderStateRoot in MLKitCommon(UploaderState.pbobjc.o)
_OBJC_CLASS_$_MLKITx_EXHDeviceExperimentIdsRoot in MLKitCommon(DeviceExperimentIds.pbobjc.o)
...
"_OBJC_CLASS_$_GTMLogMininumLevelFilter", referenced from:
objc-class-ref in MLKitCommon(GIPLoggingReroutingGTMLogger.o)
"_OBJC_CLASS_$_GTMLogger", referenced from:
objc-class-ref in MLKitCommon(PHTInternalHeterodyneSyncer.o)
objc-class-ref in MLKitCommon(PHTHeterodyneSyncer.o)
objc-class-ref in MLKitCommon(GIPPseudonymousIDStore.o)
objc-class-ref in MLKitCommon(CCTLogOutputStream.o)
objc-class-ref in MLKitCommon(CCTClearcutUploader.o)
objc-class-ref in MLKitCommon(CCTClearcutMetaLogger.o)
objc-class-ref in MLKitCommon(CCTClearcutFileUtility.o)
...
"_OBJC_CLASS_$_GTMSessionCookieStorage", referenced from:
objc-class-ref in MLKitCommon(CCTClearcutUploader.o)
"_OBJC_CLASS_$_GTMSessionFetcher", referenced from:
objc-class-ref in MLKitCommon(CCTClearcutUploader.o)
"_OBJC_CLASS_$_GTMSessionFetcherService", referenced from:
objc-class-ref in MLKitCommon(PHTFlatFilePhenotype.o)
objc-class-ref in MLKitCommon(MLKModelDownloader.o)
objc-class-ref in MLKitVision(GMVCloudVisionClient.o)
"_OBJC_CLASS_$_GULCCComponent", referenced from:
objc-class-ref in MLKitCommon(MLKCustomModelManager.o)
"_OBJC_CLASS_$_GULCCComponentContainer", referenced from:
objc-class-ref in MLKitCommon(MLKContext.o)
objc-class-ref in MLKitCommon(MLKCustomModelManager.o)
"_OBJC_CLASS_$_GULCCComponentType", referenced from:
objc-class-ref in MLKitCommon(MLKModelManager.o)
objc-class-ref in MLKitCommon(MLKContext.o)
objc-class-ref in MLKitCommon(MLKCustomModelManager.o)
"_OBJC_CLASS_$_GULUserDefaults", referenced from:
objc-class-ref in MLKitCommon(MLKModelPreferencesManager.o)
objc-class-ref in MLKitCommon(MLKAnalyticsLogger.o)
objc-class-ref in MLKitCommon(MLKModelDownloader.o)
"_OBJC_CLASS_$_RCTBridge", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_CLASS_$_RCTBundleURLProvider", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_METACLASS_$_GPBMessage", referenced from:
_OBJC_METACLASS_$_MLKITx_EXHParam in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHParam_ExtensionValue in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHDeviceAccount in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHScope in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHParamPartition in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHCrossAppDescriptor in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHConfigurationTier in MLKitCommon(Experiments.pbobjc.o)
...
"_OBJC_METACLASS_$_GPBRootObject", referenced from:
_OBJC_METACLASS_$_MLKITx_EXHExperimentsRoot in MLKitCommon(Experiments.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_CADPMetalogRoot in MLKitCommon(Metalog.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EPIFlatFileRoot in MLKitCommon(FlatFile.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_CADPClientanalyticsRoot in MLKitCommon(Clientanalytics.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_FBMLFirebaseMlSdkRoot in MLKitCommon(FirebaseMlSdk.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_CCTUploaderStateRoot in MLKitCommon(UploaderState.pbobjc.o)
_OBJC_METACLASS_$_MLKITx_EXHDeviceExperimentIdsRoot in MLKitCommon(DeviceExperimentIds.pbobjc.o)
...
"_OBJC_METACLASS_$_GTMLogger", referenced from:
_OBJC_METACLASS_$_MLKITx_GIPLoggingReroutingGTMLogger in MLKitCommon(GIPLoggingReroutingGTMLogger.o)
"_RCTAppSetupDefaultRootView", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_RCTAppSetupPrepareApp", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_kGTMSessionFetcherStatusDomain", referenced from:
___91-[MLKITx_PHTInternalHeterodyneSyncer syncHoldingLockWithSyncedScopes:fetchReason:callback:]_block_invoke in MLKitCommon(PHTInternalHeterodyneSyncer.o)
___150-[MLKITx_PHTHeterodyneSyncer batchSyncWithAccounts:syncedScopes:fetchReason:throttlingCache:heterodyneSyncInfo:accountToAuthToken:lastError:callback:]_block_invoke in MLKitCommon(PHTHeterodyneSyncer.o)
___69-[MLKModelDownloader beginModelDownloadWithURL:modelInfo:conditions:]_block_invoke.285 in MLKitCommon(MLKModelDownloader.o)
___63-[MLKITx_GMVCloudVisionClient initWithCloudUri:apiKey:options:]_block_invoke in MLKitVision(GMVCloudVisionClient.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我尝试通过运行以下类似的
问题来解决问题:
pod deintegrate && pod cache clean --all
,然后在ios目录中运行pod install
。
遗憾的是,这并没有解决问题,我还尝试了以下thread中建议的步骤:即排除目标arm64。但这也没有修复错误。
我还在这个 github thread 上阅读了以下内容:
这与 Google MLKit 团队不提供 ARM 模拟器二进制文件有关,我们无法自己编译,因为源代码不公开
所以现在我有点迷失了该怎么办。
非常感谢任何帮助或建议。
使用 mac book pro M1 14 英寸
运行最新版本的 React Native
如果需要其他信息,请告诉我,以便我可以将其添加到问题中。
您必须按照以下步骤从
pod 文件中排除
arm64
:
post_install do |installer|
react_native_post_install(installer)
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
use_flipper!({'Flipper' => '0.79.0'})
rm -rf ~/Library/Caches/CocoaPods && rm -rf ./ios/Pods && rm -rf ~/Library/Developer/Xcode/DerivedData/* && pod deintegrate && pod setup && npx pod-install
由于排除
arm64
将阻止您的应用程序在本机模拟器上运行,因此您需要安装 Rosetta 支持并启用 Rosetta 模拟器:
$ software update --install-rosetta
如果没有这个,应用程序将启动,但一旦您尝试 MLKit 调用就会崩溃。
根据我对此主题的发现,Google MLKit 尚不支持 arm64(在尝试通过 iOS 项目上的 SPM 导入它的选项时发现它)。在 M1 机器上构建此程序的唯一方法是使用 Rosetta 2 在 x86_64 兼容性上运行整个项目。但是,Apple 不支持在兼容模式下运行 Xcode 配置,因此此选择可能会出现其他错误。
您必须通过ios模拟器使用rosetta。
此链接可能会帮助您解决问题。 https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/