尝试安装Google Analytics并编译我的iOS 5项目时,收到以下错误消息:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_GANTracker", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
并且代码将无法编译。
我的构建目标是iOS 5,我链接以下库:
- libsqlite3.dylib
- libz.dylib
- libGoogleAnalytics.a
- CFNetwork
- 和GANTracker.h
并推出:
#import "GANTracker.h"
#define kGANAccountId @"UA-XXXXXXX-X"
static const NSInteger kGANDispatchPeriodSec = 10;
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[GANTracker sharedTracker] startTrackerWithAccountID:kGANAccountId
dispatchPeriod:kGANDispatchPeriodSec
delegate:nil];
NSError *error;
if (![[GANTracker sharedTracker] setCustomVariableAtIndex:1
name:@"iPhone1"
value:@"iv1"
withError:&error]) {
// Handle error here
}
if (![[GANTracker sharedTracker] trackEvent:@"my_category"
action:@"my_action"
label:@"my_label"
value:-1
withError:&error]) {
// Handle error here
}
if (![[GANTracker sharedTracker] trackPageview:@"/app_entry_point"
withError:&error]) {
// Handle error here
}
任何我都遵循了所有内容:http://code.google.com/mobile/articles/analytics_end_to_end.html
我错过了一个图书馆或框架吗? 我正在使用Xcode版本4.3.1
答案 0 :(得分:3)
如果您仍然想知道导致问题的原因,很可能您的libGoogleAnalytics库仅针对一种架构(ARM)而非针对i386(针对模拟器)进行编译。
那么如何确定哪些架构是二进制文件的一部分呢?为此,可以使用otool,例如以下命令(在终端上):
otool libGoogleAnalytics.a -f
给我以下输出(请注意:我自己创建了Google Analytics库的胖二进制文件):
Fat headers
fat_magic 0xcafebabe
nfat_arch 3
architecture 0
cputype 7
cpusubtype 3
capabilities 0x0
offset 68
size 243208
align 2^2 (4)
architecture 1
cputype 12
cpusubtype 6
capabilities 0x0
offset 243276
size 231504
align 2^2 (4)
architecture 2
cputype 12
cpusubtype 9
capabilities 0x0
offset 474780
size 229552
align 2^2 (4)
Archive : libGoogleAnalytics.a (architecture i386)
Archive : libGoogleAnalytics.a (architecture armv6)
Archive : libGoogleAnalytics.a (architecture armv7)
在最后3行中显示了支持的体系结构。您可以使用lipo命令行工具创建自己的“胖”二进制文件。
答案 1 :(得分:0)
如果您的编译源中缺少GANTracker?转到项目设置,然后是应用程序的构建目标,然后是构建阶段,并确保所有依赖项都出现在相应的部分中。
答案 2 :(得分:0)
我遇到了同样的问题并通过添加您添加的所有内容并添加了您未提及的libGoogleAnalytics_NoThumb.a来解决问题。我在这里找到了它:
http://code.google.com/apis/analytics/docs/mobile/download.html
答案 3 :(得分:0)
确保CFNetwork.framework列在“链接二进制文件库”下的当前目标的“构建阶段”中。
这解决了我的问题。