首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIMBL中的方法切换

SIMBL中的方法切换
EN

Stack Overflow用户
提问于 2010-11-11 17:24:46
回答 1查看 1.4K关注 0票数 1

在我使用SIMBL连接的外部应用程序中,我遇到了一些很大的麻烦。

在这个应用程序中,有一个类-让我们称之为"AppClass“。在这个类中有一个函数,

代码语言:javascript
复制
-(void)doSomething;

这是我从class中得到的--转储二进制文件。整个接口定义为:

代码语言:javascript
复制
@interface AppClass : NSObject
{
}

我正在尝试用jr_swizzleMethod:withMethod:error覆盖这个函数:

在缺乏文档的情况下,我得出了以下结论:

代码语言:javascript
复制
    #import "JRSwizzle.h"
    #import "AppClass.h"

@interface AppClass (MyPlugin)
- (void)myPlugin_doSomething;
@end

@implementation AppClass (MyPlugin)

- (void)myPlugin_doSomething {
 NSLog(@"lol?");
}

@end

@implementation MyPlugin

+ (void) load {
 Mylugin* plugin = [MyPlugin sharedInstance];

 NSError *err = nil;
 BOOL result = [NSClassFromString(@"AppClass") jr_swizzleMethod:@selector(doSomething) withMethod:@selector(myPlugin_doSomething) error:&err];

 if(!result)
  NSLog(@"<Plugin> Could not install events filter (error: %@)", err);

 NSLog(@"Plugin installed");
}



+ (MyPlugin *)sharedInstance {
 static MyPlugin* plugin = nil;

 if(plugin == nil)
  plugin = [[MyPlugin alloc] init];

 return plugin;
}

@end

这应该足够了,对吧?但是我在编译时得到了这个错误:

代码语言:javascript
复制
Undefined symbols:
  "_OBJC_CLASS_$_AppClass", referenced from:
      l_OBJC_$_CATEGORY_AppClass_$_MyPlugin in MyPlugin.o
      objc-class-ref-to-AppClass in MyPlugin.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-14 17:46:45

您正在创建一个插件,它引用二进制文件中的符号(您试图扩展的应用程序)。因此,您需要告诉链接器在哪里查找这些符号(在您的示例中,这是_OBJC_CLASS_$_AppClass,即在二进制文件中定义的AppClass。)。

这是通过将选项-bundle_loader executable_name传递给链接器来完成的。参见the man page for ld

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4152907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档