尝试编译MobileSubstrate插件 - 未定义的符号

时间:2010-04-26 11:58:13

标签: iphone objective-c gcc compiler-construction makefile

我通过this tutorial创建了一个MobileSubstrate插件。我可以编译example hook而不会出错。

但是一旦我添加

#import <SpringBoard/SBAwayController.h>
<{1>}和

中的

ExampleHookProtocol.h
SBAwayController *awayController = [SBAwayController sharedAwayController]; 中的

(作为ExampleHookLibrary.mm函数的第一行)在尝试__$ExampleHook_AppIcon_Launch时(后一个更改触发),我收到以下错误消息:

make

SBAwayController的头文件位于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. ,就像ExampleHook使用的/var/toolchain/sys30/usr/include/SpringBoard一样。

我在iPod touch 2G上进行编译。

任何人都可以帮助我吗?

提前致谢,

埃里克

2 个答案:

答案 0 :(得分:6)

由于编译时无需链接,因此需要在运行时获取类,因此添加

Class $SBAwayController = objc_getClass("SBAwayController");
在初始化程序中

,然后更改

SBAwayController *awayController = [SBAwayController sharedAwayController];

SBAwayController *awayController = [$SBAwayController sharedAwayController];

答案 1 :(得分:1)

您也可以使用:

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