Tuve muchos de estos errores al intentar que CODAN ejecutara algún código que estaba destinado a una Mac. Las bibliotecas SDK de mi Mac se incluyeron a través de enlaces simbólicos como en el this question (pero no todas - ¡permanezcan sintonizadas!) Al final, resultó que no tenía todos los encabezados incluidos. Por ejemplo, tenía la función de llamada siguiente:
IORegistryEntryGetParentEntry(service, kIOServicePlane, &parent);
Qué estaba dando el error:
Invalid arguments 'Candidates are: ? IORegistryEntryGetParentEntry(?,?,?)'
Ahora, la firma correcta de la función, definida en IOKit/IOKitLib.h
(que tenía) es:
kern_return_t IORegistryEntryGetParentEntry(
io_registry_entry_t entry,
const io_name_t plane,
io_registry_entry_t *parent);
Ahora, si tomamos el primer argumento y localizar las definiciones de tipos, obtenemos:
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)
Y luego! No tenía el include que definía __darwin_natural_t
. Esto se incluye realmente en i386
, que no tenía en mi directorio de enlace simbólico. Añadiendo que completó la cadena:
typedef __darwin_natural_t natural_t; (in i386/vm_types.h)
typedef unsigned int __darwin_natural_t; (in i386/_types.h)
Por último, CODAN sabía qué argumento 1 tipo de IORegistryEntryGetParentEntry()
se suponía que era, y el error cambiado a:
Invalid arguments 'Candidates are: kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t ,?,io_registry_entry_t*)'
Repetí este "tipo-trace" para los otros argumentos, y encontraron que el error desapareció (ni siquiera necesité reconstruir el índice, sino YMMV). Por supuesto, necesitaría encontrar los encabezados que necesita y puede estar seguro de que ellos están incluidos; ¡lo de arriba es solo un ejemplo!
Problema común y molesto. Es bueno tenerlo resuelto en StOv. –