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);
我希望有人能告诉我这是怎么回事。谢谢!
问题出在the following line:
#import </usr/include/string.h>
不要包含具有绝对路径的文件。 Kernel.framework 有自己的 string.h
版本,您可以通过 #include <string.h>
包含它。 User-space 头文件可能会在构建 kext 时导致构建错误或更微妙的问题。不要使用它们。
上面那条线,
#import </usr/include/libkern/OSAtomic.h>
也应该使用相对路径:<libkern/OSAtomic.h>
旁注:
使用 #import
(Objective-C) 可能对 C 和 C++ 头文件有效,也可能无效;有时它们在后续 #include
指令中的行为会有所不同,因此如果您有任何其他问题,请切换到 #include
.
我正在尝试从 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);
我希望有人能告诉我这是怎么回事。谢谢!
问题出在the following line:
#import </usr/include/string.h>
不要包含具有绝对路径的文件。 Kernel.framework 有自己的 string.h
版本,您可以通过 #include <string.h>
包含它。 User-space 头文件可能会在构建 kext 时导致构建错误或更微妙的问题。不要使用它们。
上面那条线,
#import </usr/include/libkern/OSAtomic.h>
也应该使用相对路径:<libkern/OSAtomic.h>
旁注:
使用 #import
(Objective-C) 可能对 C 和 C++ 头文件有效,也可能无效;有时它们在后续 #include
指令中的行为会有所不同,因此如果您有任何其他问题,请切换到 #include
.