0

所以我编写了一个 iOS 游戏,并使用 arc4random_uniform 来选择随机加电。

在 Sim 上,它工作正常,但在我的手机上,它抛出了这个错误(来自系统日志):

Nov 26 13:44:26 iPhone ----[2184]: placePowerupCalled
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]: dyld:  lazy symbol binding failed: Symbol not found: _arc4random_uniform
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Referenced from: /Applications/------.app/-----
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.------[0x1f08][2184]:         Expected in: /usr/lib/libSystem.B.dylib
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.------[0x1f08][2184]: dyld: Symbol not found: _arc4random_uniform
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Referenced from: /Applications/------.app/-------
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Expected in: /usr/lib/libSystem.B.dylib
Nov 26 13:44:27 iPhone ReportCrash[2185]: Formulating crash report for process -----[2184]
 Nov 26 13:44:27 iPhone com.apple.launchd[1] (UIKitApplication:com.yourcompany.-----[0x1f08][2184]): (UIKitApplication:com.yourcompany.-----[0x1f08]) Job appears to have crashed: Trace/BPT trap
Nov 26 13:44:27 iPhone SpringBoard[2161]: Application '-----' exited abnormally with signal 5: Trace/BPT trap

我不太确定问题是什么。我什至包含了头文件 arc4random 应该来自 (#include "stdlib.h"),但这没有用。

有人有想法么?谢谢 !:)


编辑:我尝试将二进制文件与“libSystem.b.dylib”库链接,但这也不起作用,它仍然因相同的错误而崩溃。

4

2 回答 2

5

arc4_uniform 函数是在 iOS 4.3 中添加的,不会在较低版本上运行。看起来您在 4.3 或更高版本上运行模拟器,但您的设备的 iOS 版本较低。如果您计划在低于 4.3 的版本上支持您的应用程序,请尝试改用它:

arc4random() % upperBoundExclusive

它可能不像 arc4_uniform 那样精确随机,但会起作用。

于 2011-12-03T10:59:01.317 回答
1

arc4random_uniform 在 iOS 4.3 以下不可用。幸运的是,iOS 将在运行时绑定此符号,如果它不可用,则将其分配为 null(因此出现“惰性符号绑定”错误)。

所以使用 arc4random_uniform 的最好方法是先检查它是否可用,如下所示:

#include <stdlib.h>
...
int r = 0;
if (arc4random_uniform != NULL)
    r = arc4random_uniform (100);
else
    r = (arc4random() % 100);
于 2012-06-19T12:42:39.450 回答