【问题标题】:fopen$UNIX2003 fails inside external libraryfopen$UNIX2003 在外部库中失败
【发布时间】:2013-04-06 22:41:28
【问题描述】:

我有一个外部静态库(我也有源代码),它使用“fopen”来访问文件系统上的文件。奇怪的是,当它尝试在fopen$UNIX2003 中使用EXE_BAD_ACCESS (不在fopen 中,fopen 在抛出异常时甚至不在调用堆栈中时,它总是在模拟器和设备上失败。我尝试使用相同的路径/选项直接使用fopen,它可以工作。所以,首先,库是否有可能以某种方式调用不同的fopen 实现?如果是这样,为什么,以及大多数重要的是,我怎样才能让它称为“正确”的?

编辑:实际上,在抛出异常之前调用堆栈中的最后一个函数是_interposition_vtable_unimplementedfopen$UNIX2003 在它之前。

【问题讨论】:

    标签: ios c compilation ios-simulator static-libraries


    【解决方案1】:

    fopen$UNIX2003 是一个由 OS X 提供的符号,它不是 iOS 模拟器运行时的一部分。 iOS 总是符合标准,因此没有旧版(非 $UNIX2003)函数变体(提供这些变体是为了与针对旧版本 OS X SDK 构建的代码进行二进制兼容)。

    您看到的问题的常见原因是您有一个针对 OS X SDK 构建的目标文件或存档 (libsomething.a),并试图将其链接到您的 iOS 模拟器可执行文件。这不受支持,因为这两个平台在该层不兼容。

    您需要针对 iOS 模拟器 SDK 重建您的库(libsomething.a)。

    这个问题会导致 iOS 7 在运行时中止,但现在在 iOS 8 上是构建时的链接错误,这似乎有助于使这些问题更加明显。

    【讨论】:

    • 请告诉我如何重建 libsomething.a
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多