OSX用のkextとして仮想USBバス(Linuxボックスとネットワーク経由で通信)を構築します。メイン クラスは IOUSBControllerV3 から派生します。
10.6 32 ビット、10.7.5 64 ビット、10.8 64 ビットでは動作しますが、10.7.5 32 ビットでは (a?) 純粋仮想機能が原因でロードできませんでした。kextutil は私にこれを教えてくれました。
同じシステムで kext をコンパイル (Xcode 4.6) し、システムまたは SDK のバージョンをターゲットとする多くのバリエーションを試しましたが、問題はまだ残っていますか?
特に純粋仮想関数のコンテキストでは、基本クラスのヘッダーにいくつかの #ifdef LP64の違いがあることを私は知っています。
しかし、純粋仮想関数のオーバーロードを 2 日間比較して比較した結果、なぜ 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).