使用Google-Maps-iOS-SDK(1.8.1)时,出现针对架构armv7的未定义符号错误。

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

部署目标版本:iOS 7.0

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

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

我已经正确添加了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-ref "_OBJC_CLASS_$_GMSMapView",来自: 在DealDetailsViewController.o中引用的objc-class-ref "_OBJC_CLASS_$_GMSCameraPosition",来自: 在DealDetailsViewController.o中引用的objc-class-ref "_OBJC_CLASS_$_GMSServices",来自: 在AppDelegate.o中引用的objc-class-ref ld:符号(s)未找到,适用于architecture armv7 clang:链接器命令失败,退出代码为 1(使用-v查看调用)

我还尝试过使用google地图iOS SDK手动安装(而不是使用cocoapods)。我还添加了链接器标志:-ObjC。它能够成功构建,但在运行时崩溃,显示如下的选择器未找到错误:

抛出了一个NSException异常,其中包含描述- [GMSMapView animateToCameraPosition:]:向实例发送未识别的选择器。

我只需要使用Google地图iOS SDK,无论是使用cocoapod还是手动安装。

我是否漏掉了什么?

编辑

如果涉及到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 - Rivera
有没有类似“忽略文件GoogleMaps.framework......”的警告? - l0gg3r
没有任何警告。 - regeint
4个回答

50

看起来链接器无法找到 SDK 库。头文件存在,但是 SDK 对象文件没有链接到项目中。

检查以下内容:

构建设置 -> 链接 -> 其他链接器标志 必须有一个值 $(inherited)

查看图片


1
它不起作用。我已经尝试过了。如果有任何特定的Xcode版本,那么我正在使用Xcode 5.1.1。 - regeint
太好了!运行得很顺利 :) - Naresh Reddy M

1

您是否按照下面列出的步骤操作了?

  1. 启动Xcode并打开一个现有项目,或创建新项目。如果您是iOS新手,请创建一个Single View Application,并禁用Use Storyboards,但确保开启Use Automatic Reference Counting。
  2. 将GoogleMaps.framework捆绑包拖动到您项目的Frameworks组中。当提示时,请选择复制项目到目标组文件夹中。
  3. 右键单击您项目中的GoogleMaps.framework,然后选择Show In Finder。
  4. 从资源文件夹中将GoogleMaps.bundle拖到您的项目中。我们建议将其放在Frameworks组中。当提示时,请确保未选中将项目复制到目标组文件夹中。
  5. 从项目导航器中选择您的项目,并选择您的应用程序目标。打开构建阶段选项卡,在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。如果这些设置不可见,请将“构建设置”栏中的过滤器从“基本”更改为“全部”。 最后,在您的AppDelegate中添加您的API密钥。
#import <GoogleMaps/GoogleMaps.h>

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

[GMSServices provideAPIKey:@"API_KEY"];

来源:谷歌


谢谢您的建议,但我已经尝试了多次这些步骤,但对我没有用。 - regeint
@regeint:请检查以下两个问题:
  1. 如果使用了Pods设置,通常情况下,如果使用{project}.xcodeproject而不是{project}.Workspace打开项目,则会出现以下错误。
  2. 检查目标>链接二进制文件-是否添加了框架,如果没有,请手动添加框架和目标>编译源-{controllers}.m是否存在。如果不存在,请手动添加。
- Dileep Mettu
这个解决方案不起作用,请提供另一个解决方案,谢谢。 - Ramani Hitesh

0

尝试在 Pod 文件的平台设置和目标中进行调整:

platform :ios, '7.0'

然后在终端中运行 pod update


0

我经常遇到其他库相同的错误。我无法确定确切的原因,但是当我在分支之间切换时就会发生。

解决方法很简单:

  • 删除由cocoapods生成的工作空间
  • 清除项目派生数据组织者 -> 项目 clean derived data
  • 运行pod install

这对我总是奏效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接