我正在编写完全适用于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崩溃?
由于
答案 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
在重建之前不要忘记彻底清理。
您可能只想为模拟器执行此操作。填写错误报告仍然是一个好主意。
答案 5 :(得分:0)
如果您使用的是本机库,则应使用iOS4重新编译它们(仅适用于i386版本,因为它适用于设备)。
答案 6 :(得分:0)
$ 2003后缀是由编译器在某些情况下生成的,您可以在compat的手册条目中找到完整的文档
man compat
我在最后通过设置
修复它之前已经捣乱了一段时间 -mmacosx-version-min=10.3
10.4之前的任何版本都可以完成这项工作。
希望这有帮助。