Попытка скомпилировать дополнение MobileSubstrate - неопределенный символ - PullRequest
2 голосов
/ 26 апреля 2010

Я прошел это руководство , чтобы создать аддон MobileSubstrate. Я мог бы скомпилировать пример крюка без ошибок.

Но как только я добавлю

#import <SpringBoard/SBAwayController.h>

в ExampleHookProtocol.h и

SBAwayController *awayController = [SBAwayController sharedAwayController];

в ExampleHookLibrary.mm (в качестве первой строки функции __$ExampleHook_AppIcon_Launch) Я получаю следующее сообщение об ошибке при попытке make (вызвано последним изменением):

Undefined symbols:
  "_OBJC_CLASS_$_SBAwayController", referenced from:
    __objc_classrefs__DATA@0 in ExampleHookLibrary.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [ExampleHook.dylib] Error 1.

Заголовочный файл для SBAwayController находится в /var/toolchain/sys30/usr/include/SpringBoard, так же, как SBApplicationIcon.h, который используется в ExampleHook.

Я собираю на iPod touch 2G.

Кто-нибудь может мне помочь?

Заранее спасибо,

Eric

Ответы [ 2 ]

6 голосов
/ 21 августа 2010

Поскольку при компиляции не на что ссылаться, вам нужно получить класс во время выполнения, поэтому добавьте

Class $SBAwayController = objc_getClass("SBAwayController");

в инициализаторе и изменить

SBAwayController *awayController = [SBAwayController sharedAwayController];

до

SBAwayController *awayController = [$SBAwayController sharedAwayController];
1 голос
/ 27 августа 2011

Вы также можете использовать:

SBAwayController *awayController = [objc_getClass("SBAwayController") sharedAwayController];
...