Сборка Xcode не удалась из-за семантических проблем в libkern.h - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь скомпилировать драйвер звуковой карты из GitHub (https://github.com/i3roly/CMI8788) в XCode, но у меня возникают две семантические проблемы, которые я просто не понимаю. Я действительно запутался, потому что проблемы нев самом коде, но в платформе macOS. Речь идет о файле libkern.h

Я попытался скомпилировать его на Xcode 9, потому что я подумал, что это может быть проблема с Xcode 10. Тот же результат.

Речь идет об этой части libkern.h:

extern int  ffs(int);
extern int  ffsll(unsigned long long);
extern int  fls(int);
extern int  flsll(unsigned long long);
extern u_int32_t    random(void);
extern int  scanc(u_int, u_char *, const u_char *, int);
extern int  skpc(int, int, char *);
extern long strtol(const char*, char **, int);
extern u_long   strtoul(const char *, char **, int);
extern quad_t   strtoq(const char *, char **, int);
extern u_quad_t strtouq(const char *, char **, int);
extern char *strsep(char **, const char *);
extern void *memchr(const void *, int, size_t);
extern void url_decode(char *str);

Это результат в файле журнала:

In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/IOKit/IOLib.h:44:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/IOKit/system.h:57:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/libkern/libkern.h:145:12: error: conflicting types for 'ffsll'
extern int      ffsll(unsigned long long);
                ^
In file included from /Users/jakob/Documents/CMI8788/CMI8788/XonarHDAVAudioEngine.cpp:47:
In file included from /usr/include/string.h:180:
/usr/include/strings.h:86:6: note: previous declaration is here
int      ffsll(long long) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
         ^
In file included from /Users/jakob/Documents/CMI8788/CMI8788/XonarHDAVAudioEngine.cpp:49:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/IOKit/IOLib.h:44:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/IOKit/system.h:57:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Kernel.framework/Headers/libkern/libkern.h:147:12: error: conflicting types for 'flsll'
extern int      flsll(unsigned long long);

Я надеюсь, что кто-нибудь может сказать мне, что происходит. Спасибовы!

1 Ответ

0 голосов
/ 23 января 2019

Проблема возникает в следующей строке :

#import </usr/include/string.h>

Не включайте файлы с абсолютным путем. Kernel.framework имеет собственную версию string.h, которую вы можете просто включить через #include <string.h>. Заголовочные файлы пользовательского пространства могут вызвать ошибки сборки или более тонкие проблемы при создании kext. Не используйте их.

Строка над ней,

#import </usr/include/libkern/OSAtomic.h>

, вероятно, также должен использовать относительный путь: <libkern/OSAtomic.h>

Примечание:

Использование #import (Objective-C) может работать или не работать для заголовков C & C ++; иногда они будут вести себя по-разному в последующих директивах #include, поэтому, если у вас возникнут дополнительные проблемы, переключитесь на #include.

...