fopen $ UNIX2003在外部库中失败

我有一个外部静态库(我也有源代码)使用'fopen'来访问文件系统上的文件。 奇怪的是,它总是在模拟器和设备上都失败,当它试图用EXE_BAD_ACCESSfopen$UNIX2003 (不是在fopenfopen甚至不是在抛出exception的时候调用堆栈中。因此,首先,图书馆是否有可能调用不同的fopen实现?如果是这样,为什么,最重要的是,我怎样才能把它称为“正确的“一个?

编辑:其实,在引发exception之前的调用堆栈中的最后一个函数是_interposition_vtable_unimplementedfopen$UNIX2003之前。

fopen $ UNIX2003是OS X提供的一个符号,不是iOS Simulator运行时的一部分。 iOS 始终保持一致,因此不具有传统(非$ UNIX2003)函数变体(提供与针对较早版本的OS X SDK构build的代码的二进制兼容性)。

您所看到的问题的常见原因是您有一个针对OS X SDK构build的对象文件或存档(libsomething.a),并正尝试将其链接到您的iOS Simulator可执行文件。 这不被支持,因为这两个平台在该层不是二进制兼容的。

你需要重build你的库(libsomething.a)对iOS模拟器SDK。

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