3

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

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

4

1 回答 1

2

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

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

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

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

于 2014-09-23T22:11:35.070 回答