【问题标题】:ld: 12 duplicate symbols for architecture arm64 clang: error: linker command failed with exit code 1ld:架构 arm64 的 12 个重复符号 clang:错误:链接器命令失败,退出代码为 1
【发布时间】:2021-12-25 08:05:42
【问题描述】:

我遇到了一个构建错误,我认为该错误很可能源自 Objective-C/Swift + React Native Adapter/Linker。

在我上次成功向 Ap​​p Store Connect 提交新构建后,我立即无法成功生成 XCode 构建。什么都没有改变!我确实有大约 6 天没有接触代码库,突然间我生成了损坏的构建。在我的物理 iPhone 设备上测试和开发我的应用程序时,我一直使用 XCode 来生成我的构建。

我的 package.json:

{
    "private": true,
    "main": "index.js",
    "engines": {
        "node": "14.17.0"
    },
    "scripts": {
        "start": "react-native start",
        "android": "react-native run-android",
        "ios": "react-native run-ios",
        "mac": "npx react-native run-macos",
        "react-devtools": "react-devtools",
        "flow": "flow"
    },
    "dependencies": {
        "@expo/react-native-action-sheet": "^3.7.0",
        "@invertase/react-native-apple-authentication": "^2.1.2",
        "@ptomasroos/react-native-multi-slider": "^2.2.2",
        "@react-native-community/datetimepicker": "^3.5.0",
        "@react-native-community/masked-view": "^0.1.10",
        "@react-native-community/push-notification-ios": "^1.8.0",
        "@react-native-community/slider": "3.0.3",
        "@react-native-picker/picker": "^1.16.1",
        "@react-navigation/bottom-tabs": "^5.10.2",
        "@react-navigation/native": "^5.9.4",
        "@react-navigation/stack": "^5.14.5",
        "axios": "^0.21.1",
        "components": "file:./components",
        "expo-av": "^9.2.3",
        "expo-constants": "^11.0.1",
        "expo-contacts": "^9.2.5",
        "expo-crypto": "^9.2.0",
        "expo-device": "^3.3.0",
        "expo-facebook": "^11.3.1",
        "expo-file-system": "^11.1.3",
        "expo-google-app-auth": "^8.1.3",
        "expo-in-app-purchases": "^10.2.0",
        "expo-linking": "^2.3.1",
        "expo-location": "^12.1.2",
        "expo-secure-store": "^10.2.0",
        "expo-sms": "^9.2.3",
        "expo-splash-screen": "^0.11.2",
        "firebase": "^8.6.8",
        "form-data": "^4.0.0",
        "node-apple-receipt-verify": "^1.10.0",
        "prop-types": "^15.7.2",
        "react": "17.0.2",
        "react-native": "0.64.2",
        "react-native-appearance": "~0.3.3",
        "react-native-config": "^1.4.2",
        "react-native-draggable-flatlist": "^2.5.1",
        "react-native-error-boundary": "^1.1.10",
        "react-native-fast-image": "^8.3.6",
        "react-native-gesture-handler": "^1.10.3",
        "react-native-image-crop-picker": "^0.36.2",
        "react-native-image-viewing": "^0.2.0",
        "react-native-modalize": "^2.0.8",
        "react-native-pager-view": "^5.1.9",
        "react-native-push-notification": "^7.4.0",
        "react-native-reanimated": "^2.1.0",
        "react-native-restart": "0.0.22",
        "react-native-safe-area-context": "^3.2.0",
        "react-native-safe-area-view": "^1.1.1",
        "react-native-screens": "^3.4.0",
        "react-native-sectionlist-contacts": "^1.1.3",
        "react-native-sortable-list": "0.0.24",
        "react-native-status-bar-height": "^2.5.0",
        "react-native-unimodules": "^0.14.3",
        "react-native-uuid": "^2.0.1",
        "react-native-view-overflow": "0.0.5",
        "react-native-webview": "^11.6.1",
        "unimodules-permissions-interface": "^6.1.0"
    },
    "devDependencies": {
        "@babel/cli": "^7.13.16",
        "@babel/core": "^7.14.2",
        "@babel/preset-flow": "^7.13.13",
        "babel-plugin-transform-remove-console": "^6.9.4",
        "flow-bin": "^0.155.1",
        "metro-react-native-babel-preset": "^0.66.0",
        "prettier": "^2.2.1",
        "prettierrc": "0.0.0-5",
        "react-devtools": "^4.14.0",
        "react-native-codegen": "0.0.7",
        "react-test-renderer": "^17.0.2",
        "sharp-cli": "^1.14.1"
    },
    "name": "react-native-app",
    "version": "1.0.0"
}

我的 XCode 构建错误日志:

duplicate symbol '_EXCanAskAgain' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_EXExpiresKey' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_EXGrantedKey' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_EXPermissionExpiresNever' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_EXStatusKey' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_CLASS_$_EXPermissionsService' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_IVAR_$_EXPermissionsService._moduleRegistry' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_IVAR_$_EXPermissionsService._requesters' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_IVAR_$_EXPermissionsService._requestersByClass' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_METACLASS_$_EXPermissionsService' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXPermissionsService.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXPermissionsService.o)
duplicate symbol '_OBJC_CLASS_$_EXReactNativeUserNotificationCenterProxy' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXReactNativeUserNotificationCenterProxy.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXReactNativeUserNotificationCenterProxy.o)
duplicate symbol '_OBJC_METACLASS_$_EXReactNativeUserNotificationCenterProxy' in:
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/ExpoModulesCore/libExpoModulesCore.a(EXReactNativeUserNotificationCenterProxy.o)
    /Users/davidcarrillojr/Library/Developer/Xcode/DerivedData/GlobeChat-gwrzspklsexqfbdkcqokomncvcbi/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/UMReactNativeAdapter/UMReactNativeAdapter.framework/UMReactNativeAdapter(EXReactNativeUserNotificationCenterProxy.o)
ld: 12 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我尝试了以下命令,试图清除我的缓存:

用于清理项目根目录的bash脚本:

watchman watch-del-all && rm -rf $TMPDIR/react-* && npm cache clean --force
rm -rf debug.log
rm -rf package-lock.json && rm -rf node_modules

# Inside my `ios` dir:
rm -rf ~/Library/Caches/CocoaPods
rm -rf ~/Library/Developer/Xcode/DerivedData/*
rm -rf Pods
rm -rf Podfile.lock
pod cache clean --all # will clean all pods
pod deintegrate
pod setup

我的Podfile

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/react-native-unimodules/cocoapods.rb'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'


platform :ios, '12.0'

target 'GlobeChat' do
  use_unimodules!
  config = use_native_modules!
    
  use_react_native!(
    :path => config[:reactNativePath],
    # :hermes_enabled => true
  )

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
      end
    end
  end
end

【问题讨论】:

    标签: ios objective-c xcode react-native clang


    【解决方案1】:

    显然,在 2021 年 10 月,Expo 对其模块进行了一些更新,这些更新对我造成了重大变化,因为我处于被弹出的 Expo 环境中。我最终将我的应用程序重新集成到新发布的 Expo 43 中,并在我的应用程序周围重新建立了一个 Expo shell。完成此操作后,使用 ExpoModules 而不是 react_unimodules,我能够在模拟器和真实设备上成功构建我的应用程序。

    故事的寓意是,如果您在裸露的 react-native 工作流程中变得非常依赖模块,那么监控这些模块维护者对其模块所做的更改就变得非常重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2015-05-10
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多