这个问题的产生是因为我不完全理解iOS中的静态库,而且谷歌的文档似乎有点稀疏。
我正在尝试将 Google Cloud Endpoints 用于我的移动后端。
我为我的客户端库生成 .m 和 .h 文件。然后我创建了一个新项目(OwnItApi),将libGTLTouchStaticLib.a静态库从GTL.proj拖到这个新项目中。然后我将生成的文件 .m 和 .h 文件添加到该项目中。我将所有 .m 文件添加到编译源,然后将头文件复制到文件中。在“构建设置”中,我将“-ObjC -all_load”添加到“其他链接器标志”项。
Update:我忘了提及,我还将标头从 GTL.proj 复制到了 OwnItAPI 项目。这些包括文件 GTLBase64.h、GTLBatchQuery.h、GTLBatchResult、h 等。我想我必须这样做,因为没有它们构建就会失败。
如果没有标题,我会得到:错误“找不到'GTLObject.h'文件”。在进口声明上。
然后,我将从该项目生成的静态库添加到我的主项目中,该项目的目标是 iphone 应用程序。为了测试 API 是否正常工作,我将其添加到 App Delegate
#import "OwnItApi/GTLServiceOwnit.h"
#import "OwnItApi/GTLQueryOwnit.h"
#import "OwnItApi/GTLOwnitApiBrands.h"
这是应用程序内部:didFinishLaunchingWithOptions:函数
static GTLServiceOwnit *service = nil;
if (!service) {
service = [[GTLServiceOwnit alloc] init];
service.retryEnabled = YES;
[GTMHTTPFetcher setLoggingEnabled:YES];
}
GTLQueryOwnit *query = [GTLQueryOwnit queryForBrandsListWithUserID:@"venkat"];
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLOwnitApiBrands *object, NSError *error) {
NSArray *items = [object brands];;
NSLog(@"%@", items);
}];
当我编译时,我收到如下重复错误:
duplicate symbol _OBJC_METACLASS_$_GTLOwnitApiBrand in:
/Users/vrao/Library/Developer/Xcode/DerivedData/Own_It!-ertvnctptaddricdrjyrmgemzgsh/Build/Products/Release-iphoneos/libOwnItApi.a(GTLOwnit_Sources.o)
17 个看起来就像这样的错误。然后最后
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Update:在 GTL 项目中,libGTLTouchStaticLib.a 在构建后呈红色,当我右键单击它时,“在 Finder 中显示”呈灰色。为了查找 .a 文件,我对“GTL.framework”使用“在 Finder 中显示”,然后返回文件夹以查找 libGTLTouchStaticLib.a。