12

我正在编写在 4.0/4.1 iPhone 模拟器上完美运行的应用程序,但不是 4.2。

我收到这样的警告:

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

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

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

谢谢

4

7 回答 7

2

在此 cleanAll 构建之前

在 xcode 中转到 Project > set active executable > appname - Iphone 4.0 模拟器

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

然后双击 urapptarget 并在构建选项卡中更改“ios部署目标= 4.0”

现在在模拟器中运行它会工作

于 2011-06-08T08:40:43.893 回答
1

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

于 2010-12-09T20:21:13.790 回答
1

通过http://bugreporter.apple.com/ 提交错误

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

于 2010-11-24T23:32:23.890 回答
1

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

于 2011-01-13T22:07:32.257 回答
0

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

man compat

我为此挣扎了一段时间,然后最终通过设置来修复它

-mmacosx-version-min=10.3

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

希望这可以帮助。

于 2011-11-07T11:56:09.090 回答
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

不要忘记在重建之前进行全面清洁。

将剥离链接产品设置为关闭

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

于 2011-02-20T03:35:43.720 回答
0

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

于 2011-03-11T13:40:22.697 回答