【问题标题】:Ho can I use adMob library for iOS without using -all_load linker flag我可以在不使用 -all_load 链接器标志的情况下使用适用于 iOS 的 adMob 库吗
【发布时间】:2012-08-18 08:59:47
【问题描述】:

我正在将 google 提供的 adMob 添加到我的 iOS 应用程序中,但我被困在安装的这一部分: 在项目构建信息中的 Other Linker Flags 下添加 -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

【问题讨论】:

  • 您尝试过-ObjC 吗? (最近的 Xcode [llvm] 版本不需要 all_load)。
  • 是的,我使用了您建议的链接器标志 -ObjC,但它显示 agin json 重复错误。

标签: ios admob


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多