0

我正在将 google 提供的 adMob 添加到我的 iOS 应用程序中,但我被困在安装的这一部分:在项目构建信息中的其他链接器标志下添加 -all_load

如果我添加了那个标志,那么另一个第三方库会中断给我错误消息:

ld:在 /Users/josh/Projects/app/libs/libvt_universal.a(vw_ctype-3279EF26D0C25F3A.o) 和 /Users/josh/Projects/app/libs/libvt_universal.a(vw_ctype-34AB9EC0B46D954C.o) 中重复符号 _vw_chartype_table_p架构 i386

有什么方法可以在不使用 -all_load 的情况下使用 adMob 库?例如,我尝试过 -force_load $(SOURCE_ROOT)/adMob/libGoogleAdMobAds.a 但 ld: file not found: /Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a

4

1 回答 1

1

Google 建议使用 -all_load 的原因是他们在代码中使用了类别,而具有类别的 Objective-C 库没有被 llvm 链接器正确加载(在 4.3 xcode 中就是这种情况,不确定 4.4 与较新的 clang )。

所以,我想如果你很勇敢,你可以尝试删除 all_load 标志。它应该构建良好。如果错误未修复,那么当您运行代码时会发生什么情况,它会崩溃,因为库使用的任何类别都不会被加载。无论如何,这可能是一件好事,因为您的项目应该构建,如果没有,您可以先解决这些问题。

我建议你做的是使用 -force_load,它让 llvm 加载 adMob 库中的类别(除其他外)。要使用它,您必须有一个完全限定的路径(即从“/”开始)到库。显然,如果您使用终端并运行:

ls -l /Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a

它会失败。所以输入正确的路径 - 硬编码 - 现在只是看看你是否可以让项目首先构建,然后运行。如果是这样,您稍后可以找出合适的 $(VAR) 用于在您的项目中找到它。

于 2012-08-18T13:56:38.733 回答