CODAN を Mac 向けのコードで実行しようとしたときに、これらのエラーがたくさん発生しました。私のMac SDKライブラリは、この質問のようにシンボリックリンクを介して含まれていました(ただし、すべてではありません-お楽しみに!)最終的に、すべてのヘッダーが含まれていないことが判明しました。たとえば、次の関数呼び出しがありました。
IORegistryEntryGetParentEntry(service, kIOServicePlane, &parent);
エラーが発生していた:
Invalid arguments 'Candidates are: ? IORegistryEntryGetParentEntry(?,?,?)'
IOKit/IOKitLib.h
さて、 (私が持っていた)で定義された関数の正しい署名は次のとおりです。
kern_return_t IORegistryEntryGetParentEntry(
io_registry_entry_t entry,
const io_name_t plane,
io_registry_entry_t *parent );
ここで、最初の引数を取り、型定義をトレースすると、次のようになります。
typedef io_object_t io_registry_entry_t; (in IOKit/IOTypes.h)
typedef mach_port_t io_object_t; (in IOKit/IOTypes.h)
typedef mach_port_name_t mach_port_t; (in mach/port.h)
typedef natural_t mach_port_name_t; (in mach/port.h)
その後!を定義したインクルードがありませんでした__darwin_natural_t
。このインクルードは実際には にi386
あり、シンボリック リンク ディレクトリにはありませんでした。それを追加すると、チェーンが完成しました。
typedef __darwin_natural_t natural_t; (in i386/vm_types.h)
typedef unsigned int __darwin_natural_t; (in i386/_types.h)
最後に、CODAN は の型引数 1 が何であるべきかIORegistryEntryGetParentEntry()
を認識し、エラーは次のように変わりました。
Invalid arguments 'Candidates are: kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t ,?,io_registry_entry_t*)'
他の引数についてもこの「型トレース」を繰り返したところ、エラーが消えたことがわかりました (インデックスを再構築する必要さえありませんでしたが、YMMV でした)。もちろん、必要なヘッダーを見つける必要があり、それらが含まれていることを確認する必要があります-上記は単なる例です!