【问题标题】:Linker error compiling PDFKit编译 PDFKit 的链接器错误
【发布时间】:2013-04-28 01:02:04
【问题描述】:

我正在尝试将 iOS 的 PSPDFKit 集成到我的项目中,但我还没有成功。下载Demo版后,将框架添加到我的项目中,添加所有需要的库并放置

#import <PSPDFKit/PSPDFKit.h>

在“前缀”文件上,我收到链接器错误:

ld: section __objc_const (address=0x00613EA8, size=4651232504) would make the output executable exceed available address range for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

注意:我的项目使用PSTCollectionView,并且我已经在一个测试项目(仅为该效果创建)上成功编译了 PSPDFKit。

我非常感谢任何帮助。提前致谢。

【问题讨论】:

  • 这是您的问题:size=4651232504 - 这是为 64 位 Mac 设计的吗?看起来一些整数已经包裹,而负数看起来像一个无符号的巨大数字。看上面的 HEX 数字,看它是不是 0xFFFFFFFF
  • 感谢您的反馈,但我不确定您想说什么size=462343505 是问题所在。该应用程序是一个 iOS 应用程序,因此它是一个 32 位 ARM 处理器。我检查了数字 0xFFFFFFFF,十进制是 4294967295,而不是 4651232504,所以它们不匹配。
  • 我的意思是,只是读取错误,在一个大小为 4 GB 的地址处有一些 ObjectiveC 常量。在 32 位系统上加载这么大的对象是不可能的。追踪它,你的问题就解决了。我怀疑某些创建某些静态对象大小的宏被搞砸了(溢出、下溢)并导致了这种情况。除了四处寻找之外没有其他想法 - 肯定很乏味。
  • 我在构建一个不同的库时遇到了这个问题 - 与 LTO 的链接使它消失了 (-flto)。可以帮到你。

标签: ios pspdfkit pstcollectionview


【解决方案1】:

显然,您的 PCH 文件中包含的文件过多。

尝试删除其中的一些文件,并仅在您需要的地方包含这些文件,而不是全局包含这些文件。

【讨论】:

    【解决方案2】:

    据我了解,这是 Apple 的编译器/链接器链中的一个错误。请在radar.apple.com 上将您失败的项目提交给雷达。一种解决方法是使用源代码作为子项目而不是预编译的二进制文件。

    一旦我能接触到这样的项目,我就可以对这些设置进行试验,看看是否有任何解决方法。似乎只有在与其他 3rd 方代码非常特定的组合下才会发生。

    【讨论】:

    • 感谢您的反馈,显然问题是由于 PSUICollectionViewFlowLayout 上的一个类别修复了流布局。去掉这个分类就没有问题了。
    • 这是一个很好的提示,当有人再次遇到此问题时会记住这一点。谢谢!
    猜你喜欢
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多