C++ 如何从另一个kext动态强制转换类?

C++ 如何从另一个kext动态强制转换类?,c++,xcode,iokit,kernel-extension,C++,Xcode,Iokit,Kernel Extension,我有两个KEXT,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

我有两个KEXT,
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).
有办法做到这一点吗


A.kext
中链接
classInB
将在加载时出错(符号已存在)。

您需要在kextA的Info.plist中将kextB声明为依赖项:在
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
}