Ошибка привязки ленивых символов: символ не найден: _arc4random_uniform - PullRequest
0 голосов
/ 26 ноября 2011

Итак, я программирую игру для iOS и использую arc4random_uniform для выбора случайного включения.

На симе работает нормально, но на моем телефоне выдает эту ошибку (из системного журнала):

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"), но это не сработало.

У кого-нибудь есть идеи?Спасибо!

Ответы [ 2 ]

5 голосов
/ 03 декабря 2011

Функция arc4_uniform была добавлена ​​в iOS 4.3 и не будет работать на более низких версиях. Похоже, вы запускаете симулятор на 4.3 или выше, но ваше устройство имеет более низкую версию iOS. Если вы планируете поддерживать свое приложение в версиях ниже 4.3, попробуйте использовать это вместо:

arc4random() % upperBoundExclusive

Может быть не так случайно, как arc4_uniform, но будет работать.

1 голос
/ 19 июня 2012

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);
...