jma*_*mah 4 linker cocoa objective-c ld scripting-bridge
我今天正在更新Scripting Bridge粘贴文件(对于Mail.app),并注意到sdp(1)手册页显示:
您不需要创建相应的实现文件; Scripting Bridge将在运行时创建类实现.
这听起来很酷,但是我没有实现生成的类(如预期的那样):
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MailApplication", referenced from:
objc-class-ref in DMBugReportWindowController.o
"_OBJC_CLASS_$_MailAttachment", referenced from:
objc-class-ref in DMBugReportWindowController.o
[... more of the same ...]
ld: symbol(s) not found for architecture x86_64`
Run Code Online (Sandbox Code Playgroud)
我不想压制所有未定义的符号,因为这可能很容易掩盖合法的问题,所以我只是使用-U(根据ld(1)手册页):
指定symbol_name没有定义是可以的.使用-two_levelnamespace,结果符号将标记为dynamic_lookup,这意味着dyld将搜索所有已加载的图像.
(我必须使用-Xlinker -U -Xlinker _OBJC_CLASS_$_MailApplication那些标志来达到ld,否则clang会保留这些参数.)
显然制作它们dynamic_lookup是错误的,因为这会在启动时出现动态链接错误:
dyld: Symbol not found: _OBJC_CLASS_$_MailApplication
Referenced from: /Users/jonathon/Library/Developer/Xcode/...
Expected in: flat namespace
in /Users/jonathon/Library/Developer/Xcode/...
Run Code Online (Sandbox Code Playgroud)
如果我使用-force_flat_namespace -undefined suppress(我不想使用,如上所述),也会发生这种情况.该脚本桥接编程指南似乎在暗示我做是正确的事情("准备代码"一节),但没有提到这个问题.
由于该类是动态创建的,因此无法链接到该类.该类将在运行时注册,但不会导出符号,链接器将无法找到它.
您需要将发送到MailApplication和MailAttachment发送消息的所有消息替换为NSClassFromString(@"MailApplication")和NSClassFromString(@"MailAttachment").
[MailApplication class]变NSClassFromString(@"MailApplication")和[MailAttachment class]变NSClassFromString(@"MailAttachment").
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |