我有两个关键字,kextA
和kextB
。
在kextA
中,我正在尝试动态转换(使用OSDynamicCast
)指向kextB
中的类的指针。
$ sudo kextutil -n -t -d B.kext A.kext
Diagnostics for VD.kext:
...
kxld[com...]: The following symbols are unresolved for this kext:
kxld[com...]: classInB::metaClass
Link failed (error code 5).
Check library declarations for your kext with kextlibs(8).
有办法做到这一点吗?
在classInB
中关联A.kext
会在加载时出现错误(符号已存在)。
答案 0 :(得分:0)
您需要将kextB声明为kextA的Info.plist中的依赖项:在OSBundleLibraries
字典中,添加kextB的反向DNS包标识符作为键,并将其包版本作为值。您还需要将kextB放在/ SLE或/ LE(10.9+)中,因为这些是搜索依赖项的唯一位置(无论是否已加载kextB)。
这假设您不仅仅是在进行投射,而是实际调用特定于classInB
的方法。如果你需要做的就是测试一个特定的类,你也可以不用连接就这样做:
OSMetaClass* classInB_mc = OSMetaClass::getMetaClassWithName("classInB");
OSMetaClassBase* cast_ptr = object_ptr->metaCast(classInB_mc);
if (cast_ptr)
{
// object_ptr can indeed be cast to classInB
}