Я пытаюсь портировать Fantasti c Драйвер ASUS серии XONAR для Linux, написанный Клеменсом Ладишем, для Ma c OSX.
Прямо сейчас, очень грубая версия, которая компилируется доступно по адресу: github.com/i3roly/CMI8788
Мой вопрос касается заголовка pthread.h для OSX. По умолчанию, включая pthread.h, мы пытаемся определить структуру, которая заметно отличается от структуры, включенной в драйверы IOKit. для краткости я буду использовать информативный пост из сообщения на github (https://github.com/civetweb/civetweb/issues/364#issuecomment -255438891 ):
#include <pthread.h>
#include <sys/_types/_mach_port_t.h>
typedef __darwin_mach_port_t mach_port_t;
против
#include <IOKit/audio/IOAudioDevice.h>
#include <IOKit/IOService.h>
#include <IOKit/IORegistryEntry.h>
#include <IOKit/IOTypes.h>
#include <IOKit/system.h>
#include <mach/mach_types.h>
#include <mach/host_info.h>
#include <mach/message.h>
#include <mach/port.h>
/*
* For kernel code that resides outside of Mach proper, we opaque the
* port structure definition.
*/
struct ipc_port;
typedef struct ipc_port *ipc_port_t;
#define IPC_PORT_NULL ((ipc_port_t) 0UL)
#define IPC_PORT_DEAD ((ipc_port_t)~0UL)
#define IPC_PORT_VALID(port) \
((port) != IPC_PORT_NULL && (port) != IPC_PORT_DEAD)
typedef ipc_port_t mach_port_t;
сейчас я могу получить обойти это, выполнив
#define _MACH_PORT_T
#include <pthread.h>
, но я не уверен, является ли это безопасным решением, поскольку мне кажется, что API-интерфейс pthreads для XCode подразумевает, что он должен использоваться только для пользовательских программ. это предположение неверно? разумно ли использовать этот макрос для решения проблемы переопределения?
другие пытались написать драйверы земли ядра для OSX, используя pthreads, и сталкивались с этой проблемой? Любое понимание будет оценено.
спасибо.