繁体   English   中英

Xcode构建因libkern.h中的语义问题而失败

[英]Xcode Build failed because of Semantic Issues in libkern.h

我正在尝试从Xcode的GitHub( https://github.com/i3roly/CMI8788 )编译声卡驱动程序,但遇到了两个我根本不理解的语义问题。 我真的很困惑,因为问题不在代码本身,而是在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);

我希望有人能告诉我发生了什么事。 谢谢!

问题出在以下几行

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

不要包括具有绝对路径的文件。 Kernel.framework拥有自己的string.h版本,您可以通过#include <string.h>包括在内。 构建kext时,用户空间头文件可能会导致构建错误或更多细微问题。 不要使用它们。

它上面的线,

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

还应该使用相对路径: <libkern/OSAtomic.h>

边注:

对于C&C ++标头,使用#import (Objective-C)可能有效,也可能无效。 有时它们在后续的#include指令上的行为会有所不同,因此,如果您还有其他问题,请切换到#include

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM