应用程序崩溃与4.2 iPhone模拟器'设置启动与shell关闭'

时间:2010-11-24 20:56:32

标签: iphone objective-c ios-4.2

我正在编写完全适用于4.0 / 4.1 iPhone模拟器的应用程序,但不是4.2。

我收到了这样的警告:

检测到试图调用iPhone上不存在的系统库中的符号: fcntl $ UNIX2003从图像TestApp中的函数get_socket_nonblocking调用。 如果您在gdb中运行模拟器二进制文件时遇到此问题,请确保先'set start-with-shell off'

如何在Xcode上设置'set start-with-shell off'?我试图将此行添加到.gdbinit但没有运气。

使用4.0 / 4.1 SDK iPhone模拟器会打印有关尝试在调试窗口中调用iPhone上不存在的符号的警告,但应用程序不会崩溃。使用4.2 app崩溃。如何防止4.2崩溃?

由于

7 个答案:

答案 0 :(得分:2)

在此cleanAll构建之前

在xcode中转到Project>设置活动可执行文件> appname - Iphone 4.0模拟器

然后打开模拟器然后转到硬件>版本> 4.0.2

然后双击urapptarget并在构建选项卡中更改“ios deployment target = 4.0”

现在在模拟器中运行它会起作用

答案 1 :(得分:1)

通过http://bugreporter.apple.com/

提交错误

Xcode中的调试器将像命令行中的gdb一样读取〜/ .gdbinit。尝试将该行添加到〜/ .gdbinit。

答案 2 :(得分:1)

我的早期操作系统版本的libCURL遇到了类似的问题。解决方案是在iOS 4.2下重建库以消除$ UNIX2003符号装饰。 (我在http://www.creativealgorithms.com/blog/content/building-libcurl-ios-42写了完整的详细信息。)

答案 3 :(得分:1)

我也没有成功将行添加到〜/ .gdbinit。冒着明显的风险:如果你在XCode中将模拟器版本设置为4.1,你就可以避免这个问题。这就是我现在所做的 - 只要我不需要测试仅在4.2上可用的API - 我们没有(我们仍然以iOS 3.0为目标),这很好。

答案 4 :(得分:0)

我遇到了类似的错误:

Detected an attempt to call a symbol in system libraries that is not present on the iPhone: pthread_rwlock_init$UNIX2003 called from function ...

我能够通过取消选中项目的“剥离链接产品”部署构建设置来修复,即STRIP_INSTALLED_PRODUCT = NO

在重建之前不要忘记彻底清理。

Set Strip linked Product Off

您可能只想为模拟器执行此操作。填写错误报告仍然是一个好主意。

答案 5 :(得分:0)

如果您使用的是本机库,则应使用iOS4重新编译它们(仅适用于i386版本,因为它适用于设备)。

答案 6 :(得分:0)

$ 2003后缀是由编译器在某些情况下生成的,您可以在compat的手册条目中找到完整的文档

man compat

我在最后通过设置

修复它之前已经捣乱了一段时间

-mmacosx-version-min=10.3

10.4之前的任何版本都可以完成这项工作。

希望这有帮助。