【问题标题】:Undefined symbols for architecture armv7 while using Google-Maps-iOS-SDK (1.8.1)使用 Google-Maps-iOS-SDK (1.8.1) 时架构 armv7 的未定义符号
【发布时间】:2014-08-11 16:48:02
【问题描述】:

我正在尝试使用 cocoapods (0.33.1) 添加 Google-Maps-iOS-SDK (1.8.1)

部署目标版本:iOS 7.0

我已经添加了这个 pod:pod 'Google-Maps-iOS-SDK', '~> 1.8' 已正确下载并安装 sdk。

我开始从here 添加头文件和示例地图视图加载代码。

我已正确添加 API 密钥。在一个视图控制器的- (void)viewDidLoad,
我添加了以下代码:

 // Create a GMSCameraPosition that tells the map to display the
// coordinate -33.86,151.20 at zoom level 6.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                        longitude:151.20
                                                             zoom:6];
GMSMapView *mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
self.view = mapView_;

// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = @"Sydney";
marker.snippet = @"Australia";
marker.map = mapView_; 

我在为 iPhone 构建时遇到此错误(不在模拟器中)

架构 armv7 的未定义符号:
“_OBJC_CLASS_$_GMSMarker”,引用自: DealDetailsViewController.o "_OBJC_CLASS_$_GMSMapView" 中的objc-class-ref,引用自: DealDetailsViewController.o "_OBJC_CLASS_$_GMSCameraPosition" 中的objc-class-ref,引用自: DealDetailsViewController.o "_OBJC_CLASS_$_GMSServices" 中的 objc-class-ref,引用自: AppDelegate.o ld 中的 objc-class-ref:未找到架构 armv7 clang 的符号:错误:链接器命令失败并出现退出代码 1(使用 -v 查看调用)

我也尝试过使用 google map iOS sdk 手动安装(没有 cocoapods)。我还添加了链接器标志:-ObjC。它构建良好,但在运行时崩溃,显示选择器未找到错误,如下所示:

抛出一个带有描述的 NSException - -[GMSMapView animateToCameraPosition:]: 无法识别的选择器发送到实例。

我只需要通过 cocoapod 或手动安装来使用 google map iOS SDK。

我在这里遗漏了什么吗?

编辑

如果有任何与 Pods.xcconfig 相关的内容,那么这里是该文件的内容:

FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/Google-Maps-iOS-SDK" "$(PODS_ROOT)/Parse-iOS-SDK"
    GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
    HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Bolts" "${PODS_ROOT}/Headers/Facebook-iOS-SDK" "${PODS_ROOT}/Headers/Facebook-iOS-SDK/FacebookSDK" "${PODS_ROOT}/Headers/Google-Maps-iOS-SDK" "${PODS_ROOT}/Headers/Google-Maps-iOS-SDK/GoogleMaps" "${PODS_ROOT}/Headers/MBProgressHUD" "${PODS_ROOT}/Headers/Parse-iOS-SDK" "${PODS_ROOT}/Headers/Reachability" "${PODS_ROOT}/Headers/WYPopoverController"

    OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/Bolts" -isystem "${PODS_ROOT}/Headers/Facebook-iOS-SDK" -isystem "${PODS_ROOT}/Headers/Facebook-iOS-SDK/FacebookSDK" -isystem "${PODS_ROOT}/Headers/Google-

    Maps-iOS-SDK" -isystem "${PODS_ROOT}/Headers/Google-Maps-iOS-SDK/GoogleMaps" -isystem "${PODS_ROOT}/Headers/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Parse-iOS-SDK" -isystem "${PODS_ROOT}/Headers/Reachability" -isystem "${PODS_ROOT}/Headers/WYPopoverController"

    OTHER_LDFLAGS = -ObjC -lc++ -licucore -lsqlite3 -lz -framework AVFoundation -framework AudioToolbox -framework CFNetwork -framework CoreData -framework CoreGraphics -framework CoreLocation -framework CoreText -framework GLKit -framework GoogleMaps -framework ImageIO -framework MobileCoreServices -framework OpenGLES -framework Parse -framework QuartzCore -framework Security -framework StoreKit -framework SystemConfiguration -framework UIKit -weak_framework Accounts -weak_framework AdSupport -weak_framework Security -weak_framework Social
    PODS_ROOT = ${SRCROOT}/Pods

【问题讨论】:

  • 检查包含的架构切片以防万一xcrun -sdk iphoneos lipo -info XXX.a
  • 是否有诸如“忽略文件 GoogleMaps.framework .....”之类的警告?
  • 不,没有任何警告

标签: ios google-maps cocoapods google-maps-sdk-ios


【解决方案1】:

链接器似乎找不到 sdk 库。存在标头,但 sdk 对象文件未链接到项目。

检查这个:

BuildSettings->Linking->Other Linker Flags 必须有值 $(inherited)

【讨论】:

  • 它不起作用。我已经试过了。 Xcode 版本有什么特定的,那么我使用的是 Xcode 5.1.1
  • 太棒了!像魅力一样工作:)
【解决方案2】:

您是否按照下面提到的所有步骤操作?

  1. 启动 Xcode 并打开一个现有项目,或者创建一个新项目 项目。如果您是 iOS 新手,请创建一个单一视图应用程序,然后 禁用使用情节提要,但确保使用自动参考 计数开启。
  2. GoogleMaps.framework 捆绑包拖到 项目的框架组。出现提示时,选择复制项目 到目标组的文件夹中。
  3. 右键单击GoogleMaps.framework in 您的项目,然后选择在 Finder 中显示。
  4. 拖动GoogleMaps.bundle 从 Resources 文件夹到您的项目。我们建议将其放入 框架组。出现提示时,确保将项目复制到 未选择目标组的文件夹。
  5. 选择您的项目 Project Navigator,然后选择应用程序的目标。打开 Build Phases 选项卡,在 Link Binary with Libraries 中,添加 以下框架: AVFoundation.framework
    CoreData.framework
    CoreLocation.framework
    CoreText.framework
    GLKit.framework
    ImageIO.framework
    libc++.dylib
    libicucore.dylib
    libz.dylib
    OpenGLES.framework
    QuartzCore.framework
    SystemConfiguration.framework

选择您的项目,而不是特定目标,然后打开“构建设置”选项卡。 在其他链接器标志部分,添加-ObjC。如果这些设置不可见,请将 Build Settings 栏中的过滤器从 Basic 更改为 All。 最后,将您的 API 密钥添加到您的 AppDelegate。

#import <GoogleMaps/GoogleMaps.h>

将以下内容添加到您的 application:didFinishLaunchingWithOptions: 方法中,将 API_KEY 替换为您的 API 密钥。

[GMSServices provideAPIKey:@"API_KEY"];

来源:Google

【讨论】:

  • 感谢您的建议,但我已经多次执行这些步骤,但对我不起作用。
  • @regeint:检查以下两项检查: 1. 如果通常使用 pod 设置,如果 {project}.Workspace 未用于打开项目并且 {project}.xcodeproject 是用过的。 2. 检查目标 > 与二进制文件链接 - 是否添加了框架,如果没有添加框架和目标 > 编译源 - 在此可以看到 {controllers}.m,如果没有手动添加。
  • 这个解决方案不工作,请提供其他解决方案,先生
【解决方案3】:

我经常在使用其他库时遇到同样的错误。我不能说确切的原因,但是当我在分支之间切换时会发生这种情况。

解决方法很简单:

  • 删除 cocoapods 生成的工作空间
  • 清理项目派生数据管理器 -> 项目
  • 运行 pod 安装

它总是对我有用。

【讨论】:

    【解决方案4】:

    尝试在 pod 文件的平台设置与 Target 中的部署目标中进行比较:

    platform :ios, '7.0'
    

    然后在终端中运行pod update

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      相关资源
      最近更新 更多