架构 x86_64 的 1159 个重复符号

Posted

技术标签:

【中文标题】架构 x86_64 的 1159 个重复符号【英文标题】:1159 duplicate symbols for architecture x86_64 【发布时间】:2018-09-04 14:34:25 【问题描述】:

我最近在react-native-maps 上遇到了一个奇怪的问题。尝试通过 xcode 编译应用程序时,出现以下错误

...
ld: 1159 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Whole stacktrace

到目前为止,我已经尝试了所有方法。例如这些帖子firstsecond

这是我的 Podfile:

platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'

target "__APP_NAME__" do
  react_native_path = "../node_modules/react-native"
  pod "yoga", :path => "#react_native_path/ReactCommon/yoga"
  pod 'React', path: '../node_modules/react-native', :subspecs => [
  'Core',
  'RCTActionSheet',
  'RCTGeolocation',
  'RCTImage',
  'RCTLinkingIOS',
  'RCTNetwork',
  'RCTSettings',
  'RCTText',
  'RCTVibration',
  'RCTWebSocket'
  ]

  pod 'GoogleMaps'

  pod 'Firebase/Core', '~> 5.3.0'
  pod 'Firebase/Messaging', '~> 5.3.0'

end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == 'react-native-google-maps'
      target.build_configurations.each do |config|
        config.build_settings['CLANG_ENABLE_MODULES'] = 'No'
      end
    end
    if target.name == "React"
      target.remove_from_project
    end
  end
end

我还尝试使用在 react-native-maps 存储库的自述文件中指定的完全相同的 Podfile(具有相同的结果),并且还尝试从 Other Linker Flags 中删除 -ObjC 标志,并且导致应用程序构建,但是当我尝试启动它时,它在 main.m 文件中与 Thread 1: signal SIGABRT 一起崩溃。

编辑:

在安装react-native-maps 之前,我已将我的git repo 恢复为重新安装所有节点模块并尝试重新安装所有pod(我运行this 和rm -rf ~/.cocoapods/repos/master && pod setup && pod install)然后尝试在xcode 中重建项目并且仍然得到同样的错误。我的播客文件

platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'

target "_APP_" do
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga/Yoga.podspec'
  pod 'React', path: '../node_modules/react-native', :subspecs => [
    'Core',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTGeolocation',
    'RCTImage',
    'RCTLinkingIOS',
    'RCTNetwork',
    'RCTSettings',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket'
  ]

  pod 'Firebase/Core', '~> 5.3.0'
  pod 'Firebase/Messaging', '~> 5.3.0'
end

我现在想知道,我的项目出了什么问题?

【问题讨论】:

什么版本的 Xcode? Xcode 10 beta 5 存在问题,在链接使用旧 Xcode 版本构建的库时会导致错误的重复符号问题。 我使用的是 xcode 版本 9.4.1 查看构建日志,它似乎试图链接 libReact 和 libReact-13cd854a,这就是您的问题的原因。但是,尝试使用未编译的 Podfile 创建一个空应用程序,您可以试试这个吗?您还可以添加所有 Pods 项目目标和 Pods-HlaseniRozhlasu.debug.xcconfig 文件的列表吗? 我发布了答案 【参考方案1】:

因此,经过大约一整天的调试,我找到了应用程序无法构建的原因。如果我在发布此答案之前没有解决它@Christos Koninis 评论会让我找到问题的根本原因。我再次查看日志,发现我一直在使用React 的两个实例。一个来自node_modules/,一个来自ios/pods/。我缺少的是我的 Podfile 中的这个:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

Credits

最后我的 Podfile 看起来像这样:

platform :ios, '9.0'

target "_APP_" do
  rn_path = '../node_modules/react-native' # This path is likely to be `../node_modules/react-native` in your own project.
  rn_maps_path = '../node_modules/react-native-maps' # This path is likely to be `../node_modules/react-native-maps` in your own project.

  # See http://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies
  pod 'yoga', path: "#rn_path/ReactCommon/yoga/yoga.podspec"
  pod 'React', path: rn_path, subspecs: [
    'Core',
    'CxxBridge',
    'DevSupport',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTGeolocation',
    'RCTImage',
    'RCTLinkingIOS',
    'RCTNetwork',
    'RCTSettings',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket',
  ]

  # React Native third party dependencies podspecs
  pod 'DoubleConversion', :podspec => "#rn_path/third-party-podspecs/DoubleConversion.podspec"
  pod 'glog', :podspec => "#rn_path/third-party-podspecs/glog.podspec"
  pod 'Folly', :podspec => "#rn_path/third-party-podspecs/Folly.podspec"

   # react-native-maps dependencies
   pod 'react-native-maps', path: rn_maps_path
   pod 'react-native-google-maps', path: rn_maps_path  # Remove this line if you don't want to support GoogleMaps on iOS
   pod 'GoogleMaps'  # Remove this line if you don't want to support GoogleMaps on iOS
   pod 'Google-Maps-iOS-Utils' # Remove this line if you don't want to support GoogleMaps on iOS

  # Firebase
  pod 'Firebase/Core', '~> 5.3.0'
  pod 'Firebase/Messaging', '~> 5.3.0'



end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == 'react-native-google-maps'
      target.build_configurations.each do |config|
        config.build_settings['CLANG_ENABLE_MODULES'] = 'No'
      end
    end
    if target.name == "React"
      target.remove_from_project
    end
  end
end

【讨论】:

以上是关于架构 x86_64 的 1159 个重复符号的主要内容,如果未能解决你的问题,请参考以下文章

本机链接错误:架构x86_64的1个重复符号

xcode ld:架构 x86_64 的 8 个重复符号

(FirebaseFireStoreSwift Pod) ld:架构 x86_64 的 201 个重复符号

架构 x86_64 的重复符号

架构 x86_64 的重复符号(实现 FBSDKCoreKilt)Swift

编译 Qt 应用程序时架构 x86_64 错误的重复符号