惰性符号绑定失败:未找到符号:_arc4random_uniform

时间:2011-11-26 18:59:29

标签: iphone ios jailbreak arc4random

所以我编写了一个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”库连接起来,但这也无效,而且它仍然会因同一错误而崩溃。

2 个答案:

答案 0 :(得分:5)

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

arc4random() % upperBoundExclusive

它可能不像arc4_uniform那样精确随机,但可以正常工作。

答案 1 :(得分:1)

在iOS 4.3下,

arc4random_uniform不可用。幸运的是,iOS会在运行时绑定此符号,如果它不可用,则将其指定为null(因此您的"惰性符号绑定"错误)。

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

#include <stdlib.h>
...
int r = 0;
if (arc4random_uniform != NULL)
    r = arc4random_uniform (100);
else
    r = (arc4random() % 100);