我正在将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)中的重复符号_vw_chartype_table_p。 o)用于架构i386
有没有办法在不使用-all_load的情况下使用adMob库?例如,我尝试过-force_load $(SOURCE_ROOT)/adMob/libGoogleAdMobAds.a 但 ld:找不到文件:/Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a
答案 0 :(得分:1)
Google建议使用-all_load的原因是他们在代码中使用类别,并且llvm链接器没有正确加载带有类别的Objective-C库(就像4.3 xcode中的情况一样,不确定4.4与较新的铿锵)。
所以,我想如果你很勇敢,你可以尝试删除all_load标志。它应该建立好。如果错误没有得到修复,那么当您运行代码时会发生什么,它会崩溃,因为库中没有任何类别会被加载。在任何情况下,这都可能是一件好事,因为你的项目应该构建,如果没有,你可以先解决这些问题。
我建议你做的是使用-force_load,它有llvm加载adMob库中的类别(以及其他内容)。要使用它,你必须有一个完全限定的路径(即从'/'开始)到库。显然,如果您使用终端并运行:
ls -l /Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a
它会失败。所以输入正确的路径 - 硬编码 - 现在只是看看你是否可以让项目首先构建,然后运行。如果是这样,您可以稍后找出用于在项目中找到它的适当$(VAR)。