【问题标题】:Xcode Build failed because of Semantic Issues in libkern.h由于 libkern.h 中的语义问题,Xcode 构建失败
【发布时间】:2019-01-22 22:03:17
【问题描述】:

我正在尝试在 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);

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

【问题讨论】:

    标签: c++ xcode macos iokit kernel-extension


    【解决方案1】:

    问题出在the following line:

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

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

    它上面的那一行,

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

    可能还应该使用相对路径:&lt;libkern/OSAtomic.h&gt;

    旁注:

    使用#import (Objective-C) 可能适用于 C 和 C++ 标头,也可能不适用;有时它们在随后的#include 指令中会表现不同,因此如果您还有任何问题,请切换到#include

    【讨论】:

    • 谢谢,解决了!
    猜你喜欢
    • 2022-12-29
    • 2019-11-13
    • 2021-10-20
    • 2019-12-01
    • 1970-01-01
    • 2020-12-08
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多