所以我编写了一个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”库连接起来,但这也无效,而且它仍然会因同一错误而崩溃。
答案 0 :(得分:5)
arc4_uniform函数在iOS 4.3中添加,不会在较低版本上运行。看起来你在4.3或更高版本上运行模拟器,但你的设备有较低的iOS版本。 如果您计划在低于4.3的版本上支持您的应用,请尝试使用此代码:
arc4random() % upperBoundExclusive
它可能不像arc4_uniform那样精确随机,但可以正常工作。
答案 1 :(得分:1)
arc4random_uniform不可用。幸运的是,iOS会在运行时绑定此符号,如果它不可用,则将其指定为null(因此您的"惰性符号绑定"错误)。
因此,使用arc4random_uniform的最佳方法是先检查它是否可用,如下所示:
#include <stdlib.h>
...
int r = 0;
if (arc4random_uniform != NULL)
r = arc4random_uniform (100);
else
r = (arc4random() % 100);