GoogleMapsSDK:架构 x86_64 的未定义符号
Posted
技术标签:
【中文标题】GoogleMapsSDK:架构 x86_64 的未定义符号【英文标题】:GoogleMapsSDK : Undefined symbols for architecture 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)
【问题讨论】:
【参考方案1】:当我升级使用手动安装的旧版 Google 地图 SDK 的应用时,我注意到以下变化:
需要在 Build Phases -> Link Bundle with Libraries 中链接到 CoreBluetooth.framework 和 Accelerate.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
二进制文件对我有用
【讨论】:
以上是关于GoogleMapsSDK:架构 x86_64 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章