【问题标题】:GoogleMapsSDK : Undefined symbols for architecture x86_64GoogleMapsSDK:架构 x86_64 的未定义符号
【发布时间】:2015-08-23 03:19:13
【问题描述】:

我正在尝试安装 Google 地图 SDK,运行时出现此错误:

Undefined symbols for architecture x86_64:
  "_CBAdvertisementDataManufacturerDataKey", referenced from:
      -[GMSx_PEBeaconScanner centralManager:didDiscoverPeripheral:advertisementData:RSSI:] in GoogleMaps(PEBeaconScanner.o)
  "_CBAdvertisementDataServiceDataKey", referenced from:
      -[GMSx_PEBeaconScanner centralManager:didDiscoverPeripheral:advertisementData:RSSI:] in GoogleMaps(PEBeaconScanner.o)
  "_CBCentralManagerScanOptionAllowDuplicatesKey", referenced from:
      -[GMSx_PEBeaconScanner scanIfAppropriate] in GoogleMaps(PEBeaconScanner.o)
  "_OBJC_CLASS_$_CBCentralManager", referenced from:
      objc-class-ref in GoogleMaps(PEBeaconScanner.o)
  "_OBJC_CLASS_$_CBUUID", referenced from:
      objc-class-ref in GoogleMaps(PEBeacon.o)
      objc-class-ref in GoogleMaps(PEBeaconScanner.o)
  "_vImageBoxConvolve_Planar8", referenced from:
      (anonymous namespace)::CreateBlurredImage(CGImage*, double, double) in GoogleMaps(GLWaterGroup.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

    标签: ios linker-errors google-maps-sdk-ios undefined-symbol


    【解决方案1】:

    当我升级使用手动安装的旧版 Google 地图 SDK 的应用时,我注意到以下变化:

    • 需要在 Build Phases -> Link Bundle with Libraries 中链接到 CoreBluetooth.frameworkAccelerate.framework
    • “其他链接器标志”下的 -all_load 标志将导致“重复符号”错误。 (改用 -ObjC。)

    如果您使用 CocoaPods 安装方法(根据他们当前的说明),它应该采用所需的框架,但它仍然会被 -all_load 搞砸。

    【讨论】:

    • 这节省了我很多时间.. +1 这个。
    • 为什么谷歌不能记录这个!谢谢我的朋友!
    【解决方案2】:

    确保包含以下内容

    GoogleMaps SDK 框架和捆绑包

    GoogleMaps(带有 .framework 扩展名)位于您的根目录(您的 .xcodeproj 所在的位置)

    您的 xcode 项目中引用了 GoogleMaps(扩展名为 .bundle)

    以下框架

    Accelerate.framework

    AVFoundation.framework

    CoreBluetooth.framework

    CoreData.framework

    CoreGraphics.framework

    CoreLocation.framework

    CoreText.framework

    GLKit.framework

    ImageIO.framework

    libc++.dylib

    libicucore.dylib

    libz.dylib

    OpenGLES.framework

    QuartzCore.framework

    安全性框架

    SystemConfiguration.framework

    构建设置

    您的项目设置中的架构值包括 armv7。

    Other Linker Flags 有 -ObjC ,如果不存在添加它

    【讨论】:

    • 如果我不能使用 -ObjC 标志怎么办?我需要它用于谷歌地图,但它会导致与解析框架发生冲突。有什么帮助吗?使用 -force_load 会导致符号重复...
    • 这个答案解决了我使用 google maps IOS sdk 2.0.1(在撰写本文时)的github.com/mapsplugin/cordova-plugin-googlemapscordova 插件的问题。
    【解决方案3】:
    **_vImageBoxConvolve_Planar8, referenced from: (anonymous namespace)::CreateBlurredImage(CGImage*, double, double) in GoogleMaps(GLWaterGroup.o)**
    
    This required "Accelerate.framework". So, please add it.
    
    Steps:
    1)Build Phases -> Link Bundle with Libraries.
    2)Click "+",
    3)Select "Accelerate.framework". Finish.
    
    ===================================
    
    Others errors required "CoreBluetooth.framework. So, please add it also in similar way.
    

    【讨论】:

    • 你让我很开心 Arun +1
    • 如果您要从应用程序中删除 Google 地图,这也是解决方案,除非您执行“-”
    【解决方案4】:

    看起来 Google 的 API 需要 CoreBluetooth 来定位信标。在构建阶段链接CoreBluetooth.framework,一切都应该没问题。

    编辑: 确保按照这些说明安装 GoogleMaps 以避免出现任何问题:https://developers.google.com/maps/documentation/ios/start

    【讨论】:

    • 谢谢昆汀。我只是这样做了,不幸的是它发送了另一个错误:架构 x86_64 的未定义符号:“_vImageBoxConvolve_Planar8”,引用自:(匿名命名空间)::CreateBlurredImage(CGImage*, double, double) in GoogleMaps(GLWaterGroup.o) ld: symbol( s) 未找到架构 x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
    • 你应该按照这些说明来确保你需要的所有东西都安装好了:developers.google.com/maps/documentation/ios/start
    • 是的,这些指令很糟糕,IMO 没有提到 CoreBluetooth。
    • 所以看起来 _vImageBoxConvolve_Planar8 在 Accelerate.framework 中可用。我将它添加到我的项目中,问题就消失了,现在它抱怨 GoogleMaps.framework 定义了 706 个重复符号:(
    • 我和 funkybro 有同样的问题,我现在有 706 个重复项。不能使用可可豆荚(因为它把一切都搞砸了,或者 -ObjC 标志......
    【解决方案5】:

    我有同样的问题,在我的情况下,我有 2 个 GoogleMap.framework 参考,我删除了旧的框架参考并且问题得到了解决:)

    • 点击项目
    • Build Phases -> Link Binary With Libraries -> 检查是否存在 GoogleMaps.framework 的任何重复引用
    • 如果是,则删除您未添加的一个。

    【讨论】:

    • 谢谢!检查重复引用对我有帮助!
    【解决方案6】:
    **_vImageBoxConvolve_Planar8, referenced from: (anonymous namespace)::CreateBlurredImage(CGImage*, double, double) in GoogleMaps(GLWaterGroup.o)**
    
    This required "Accelerate.framework". So, please add it.
    
    Steps:
    1)Build Phases -> Link Bundle with Libraries.
    2)Click "+",
    3)Select "Accelerate.framework". Finish.
    

    【讨论】:

      【解决方案7】:

      从(目标->构建设置->其他链接器标志)中删除 -all_load 标志解决了我在使用可可豆荚时遇到的问题。

      【讨论】:

        【解决方案8】:

        如果今天有人遇到这种情况,在 Build Settings 中链接 CoreLocation.framework 二进制文件对我有用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-07
          • 2012-07-20
          • 1970-01-01
          • 2014-05-27
          • 2017-07-06
          • 2016-06-20
          • 2016-06-14
          • 2017-08-25
          相关资源
          最近更新 更多