我有一个外部静态库(我也有源代码),它使用'fopen'来访问文件系统上的文件。奇怪的是,当它在EXE_BAD_ACCESS
内fopen$UNIX2003
尝试这样做时,它总是在模拟器和设备上都失败了(不在fopen
中,fopen
甚至不在抛出异常时调用堆栈。我已尝试直接使用fopen
自己使用相同的路径/选项并且它有效。所以,首先,库是否可能以某种方式调用不同的{{ 1}}实现?如果是这样,为什么,最重要的是如何让它调用'正确'?
编辑:实际上,抛出异常之前调用堆栈中的最后一个函数是fopen
,_interposition_vtable_unimplemented
在它之前。
答案 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上构建时出现链接错误,这似乎有助于使这些问题更加明显。