fopen $ UNIX2003在外部库中失败

时间:2013-04-06 22:41:29

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

我有一个外部静态库(我也有源代码),它使用'fopen'来访问文件系统上的文件。奇怪的是,当它在EXE_BAD_ACCESSfopen$UNIX2003尝试这样做时,它总是在模拟器和设备上都失败了(不在fopen中,fopen甚至不在抛出异常时调用堆栈。我已尝试直接使用fopen自己使用相同的路径/选项并且它有效。所以,首先,库是否可能以某种方式调用不同的{{ 1}}实现?如果是这样,为什么,最重要的是如何让它调用'正确'?

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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