gpt4 book ai didi

c++ - 如何从另一个 kext 动态转换一个类?

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:42 26 4
gpt4 key购买 nike

我有两个 kext,kextAkextB。在 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
}

关于c++ - 如何从另一个 kext 动态转换一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26440613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com