在 xcode 6.1 上为我们的 USB 设备构建 USB 驱动程序 kext,build设置 Architecture= Universal(32/64bit Intel) 和 Base SDK=10.8,构建失败并出现错误,clang: error: the clang compiler does not support 'fapple-kext' for C++ on Darwin/i386Command /Applications/Xcode 2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1如果我选择“仅构建事件架构 = 是”,则相同的项目会成功构建,但在这种情况下,kextload 在 10.8 OSX 上失败并出现以下错误,但它在 10.9 OSX 上工作Dec 19 17:36:22 localhost com.apple.kextd[16]: Failed to load /System/Library/Extensions/gdmuwm.kext - (libkern/kext) link error.Dec 19 17:36:22 localhost kernel[0]: kxld[com.gct.driver.gdmuwm]: The super class vtable '__ZTV12IOUserClient' for vtable '__ZTV13GdmUserClient' is out of date. Make sure your kext has been built against the correct headers.Dec 19 17:36:22 localhost kernel[0]: kxld[com.gct.driver.gdmuwm]: The super class vtable '__ZTV19IOEthernetInterface' for vtable '__ZTV5gdmif' is out of date. Make sure your kext has been built against the correct headers.Dec 19 17:36:22 localhost kernel[0]: kxld[com.gct.driver.gdmuwm]: The super class vtable '__ZTV20IOEthernetController' for vtable '__ZTV6gdmuwm' is out of date. Make sure your kext has been built against the correct headers.Dec 19 17:36:22 localhost kernel[0]: Can't load kext com.gct.driver.gdmuwm - link failed.Dec 19 17:36:22 localhost kernel[0]: Failed to load executable for kext com.gct.driver.gdmuwm.Dec 19 17:36:22 localhost kernel[0]: Kext com.gct.driver.gdmuwm failed to load (0xdc008016).Dec 19 17:36:22 localhost kernel[0]: Failed to load kext com.gct.driver.gdmuwm (error 0xdc008016).请帮助我如何解决驱动程序的此链接错误。 最佳答案 通用构建错误与您运行的 OS X 版本无关,而与 clang/Xcode 版本无关。您不能使用最新版本的 clang 为 i386 架构编译 kext。我认为支持 32 位 kexts 的最新 Xcode 版本是 4.6.3。 (可从 Apple 开发者网站的下载部分获得)请注意,您也不能对 32 位或通用 kext 进行协同设计,因此如果您打算同时支持 OS X,则无论如何您都需要提供 2 个版本的 kext = 10.7 和 >= 10.9。您可以使用 Xcode 4.6.3 构建通用 kext,使用 Xcode 6.x 构建签名版本。链接/加载错误是由于您使用的 OS X SDK 版本造成的。一般来说,如果 z 明智的 OS X 版本分组是: Kext 1:= 10.8(有符号,64 位) Kext 1:= 10.9(有符号,64 位)如果您需要更多功能粒度,您当然可以将 kext 拆分为 2 个以上版本。请注意,您 可以 弱链接纯 C 符号,只有 C++ 链接有问题。 2018 更新,因为这个答案目前似乎很流行,超过 3 年:在现代系统上构建 32 位 kexts 有点棘手。最简单的肯定是使用旧的 OS X 版本设置 VM 并在那里使用 Xcode 4.6.3。然而,这会扰乱 kexts 和其他面向现代操作系统版本的项目组件的构建,从而阻止您拥有构建所有内容的大统一构建。如果您设置了一个花哨的 CI 系统,可以从多个构建代理中提取构建工件,那么对于发布构建来说这很好,但是对于编辑-构建-调试周期来说仍然很痛苦。我发现的另一个解决方案是在现代 macOS 上使用旧编译器。 Xcode 4 本身不能在最新版本上运行,但可以说服编译器这样做,并生成正确的 32 位 kext。在我们的构建脚本之一的准备阶段,我有以下 bash 代码:VERBOSE=1export XCODE463APP=`mdfind 'kMDItemCFBundleIdentifier = "com.apple.dt.Xcode" && kMDItemVersion = "4.6.3"' | head -n 1`DARWIN_MAJOR=`uname -r | sed -E 's/^([0-9]+)\..*$/\1/'`if [ -e "./build-tools/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" ] && [ -e "./build-tools/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" ] ; then if (( $VERBOSE )); then echo 32-bit kext compiler appears to be in place fielse echo "Setting up 32-bit kext compiler toolchain" mkdir -p "./build-tools/Developer/Toolchains" mkdir -p "./build-tools/Developer/usr/" cp -r "$XCODE463APP/Contents/Developer/Toolchains/XcodeDefault.xctoolchain" "./build-tools/Developer/Toolchains/" cp -r "$XCODE463APP/Contents/Developer/usr/llvm-gcc-4.2" "./build-tools/Developer/usr/"fiif [ -h "./build-tools/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin${DARWIN_MAJOR}" ] || [ -e "./build-tools/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin${DARWIN_MAJOR}" ] ; then if (( $VERBOSE )); then echo "32-bit kext compiler's Darwin-version-specific stuff appears to be set up" fielse echo "Setting up 32-bit kext compiler's Darwin version specific symlink" ln -s "i686-apple-darwin11" "./build-tools/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin${DARWIN_MAJOR}"fi这会从 Xcode 4.6.3 包中提取 32 位编译器并将其放在本地构建目录中,然后在其名称中添加一个带有 macOS (Darwin) 版本的符号链接(symbolic link),编译器似乎正在寻找它。如果我没记错的话,Xcode 4.6.3 本身只附带那些最高 10.9 或 10.10 的符号链接(symbolic link),但是为较新版本添加它们似乎很高兴。我可以确认这适用于在 10.11 和 10.12 系统上使用 10.6 SDK 构建 32 位 kext 切片。更简洁的解决方案可能是从源代码构建 llvm-gcc,但设置起来也可能更耗时。关于xcode6 - xcode 6.1 构建失败,错误为 "Apple LLVM 6.0 error: compiler does not support ' fapple-kext'",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27599342/
10-09 15:44