我构建了一个虚拟 USB 总线(通过网络与 linux 盒通信)作为 OSX 的 kext。主类派生自 IOUSBControllerV3。
它在 10.6 32Bit、10.7.5 64bit、10.8 64bit 下工作,但由于(a?)纯虚函数而无法在 10.7.5 32bit 下加载。kextutil 告诉我这个。
我已经在同一系统下编译(Xcode 4.6)kext,尝试了很多针对目标系统或SDK版本的变体,但问题仍然存在?
我知道基类的标头中存在一些#ifdef LP64差异,尤其是在纯虚函数的上下文中。
但是经过两天的比较和比较纯虚函数的重载,我不知道为什么只有32位会出问题?
相同的代码在其他系统下工作,但 Lion 32 位不能。
非常感谢您的每一个提示,
关于马库斯
=========== 终端输出:
MacProTest:Developer ms$ sudo kextutil -t -v 2 MaCute.kext
Password:
Notice: MaCute.kext has debug properties set.
MaCute.kext appears to be loadable (not including linkage for on-disk libraries).
Loading MaCute.kext.
Reading load info for 13 kexts.
Created mkext for architecture i386 containing 1 kexts.
Loading MaCute.kext.
(kernel) Received request from user space to load kext de.seh.utn.MaCute.
(kernel) Loading kext de.seh.utn.MaCute.
(kernel) Allocated link buffer for kext de.seh.utn.MaCute at 0x1507000 (200704 bytes).
(kernel) kxld[de.seh.utn.MaCute]: This kext calls a pure virtual function. Make sure your kext's OSObject-derived classes implement all pure virtual functions.
(kernel) Can't load kext de.seh.utn.MaCute - link failed.
(kernel) Failed to load executable for kext de.seh.utn.MaCute.
(kernel) Kext de.seh.utn.MaCute failed to load (0xdc008016).
(kernel) Failed to load kext de.seh.utn.MaCute (error 0xdc008016).
Failed to load MaCute.kext - (libkern/kext) link error.
Failed to load MaCute.kext - (libkern/kext) link error.
Check library declarations for your kext with kextlibs(8).