【问题标题】:Linker flags for iOS with XcodeiOS 与 Xcode 的链接器标志
【发布时间】:2014-02-24 00:46:55
【问题描述】:

在哪里可以找到关于我们可以在 Xcode 中为 iOS 项目指定的编译器标志和链接器标志的文档?

我想首先阅读更多关于可能标志的当前原因是 Google Admob SDK 说我们必须设置链接器 -Objc 标志,而 Facebook SDK 建议不要为较小的二进制文件设置它。所以,我想知道,我们可以为特定库(在本例中为 google admob)设置 Objc 并为另一个库(facebook)取消设置吗?我希望能够首先找到有关编译器和链接器选项的手册页或其他文档,然后放大 Objc。有大量关于如何在 Xcode 中设置链接器标志的文档和 stackoverflow 帖子等。缺少的是我们可以设置的可能链接器标志的列表,以及它们各自的含义。

令人惊讶的是,谷歌搜索让我很困惑,因为在 clang、llvm、llvm-gcc 等上有东西,LLVM site 列出了许多 llvm 命令,但我没有看到 -Objc 在任何对应的页面。除了编译器和链接器是 clang 还是 llvm 或者它们被称为什么的问题之外,我们是否可以去一个地方来阅读有关 Xcode 当前默认用于编译和链接 iOS 项目的任何文档? (比如说,Xcode 4.6 和 Xcode 5.0.2,以防有不同的文档集?)谢谢!

【问题讨论】:

  • 谢谢,我也看到了。但是,我想问是否有关于哪些链接器标志可用以及它们的含义的更一般的参考。

标签: ios objective-c xcode linker llvm


【解决方案1】:

你可以试试man 1 ld。 对于-ObjC 标志,具体描述如下:

-ObjC 加载静态归档库的所有成员 实现一个 Objective-C 类或类别。

编辑

对于您关于 AdMob SDK 和 Facebook SDK 的其他问题,我建议将 -ObjC 添加到链接器标志中,并查看解释原因的 this 文章。基本上,Facebook 建议不要使用它,因为由于将额外的目标代码加载到您的二进制文件中,您的可执行文件最终会变得更大。

【讨论】:

  • @auspicious99 ... 同样,man clang 用于 clang 编译器的联机帮助页。小心,有一个编译器和一个链接器选项ObjC
  • 谢谢伊万!因为我不希望二进制文件不必要地变大,所以我想知道我是否可以拥有像 ObjC 这样的东西,但只适用于 Admob。 man 1 ld 透露 -force_load path_to_archive 可能是我可以使用的。会试试的。
  • 感谢@CouchDeveloper!并感谢您指出 clang 有自己的 Objc 选项,其含义与 ld 的不同。
  • @auspicious99 -force_load 应该可以正常工作。在我的回答中的问答中甚至提到它作为仅包含类别且不包含类的静态库的解决方法。
【解决方案2】:

当我将一个函数放入我的 .hpp 文件时,我遇到了这个问题。

void logError(char const* szError)
{
    ...
}

我必须添加内联才能使其工作。

inline void logError(char const* szError)
{
    ...
}

最好不要在标题中定义函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2016-09-03
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多