【问题标题】:How to fix a problem with a broken clang: missing stdlib.h如何解决损坏的 clang 的问题:缺少 stdlib.h
【发布时间】:2019-11-11 21:40:29
【问题描述】:

MacOS Mojave 10.14.5 和 Xcode 编译器有问题。准确地说,我正在尝试通过 Github 在 R 中安装一个包,编译器正在抱怨缺少的 stdlib.h。这是错误:

谁能解释一下如何解决这个问题?

clang -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG   -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include  -fPIC  -Wall -g -O2  -c bspline.c -o bspline.o
clang: warning: no such sysroot directory: '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk' [-Wmissing-sysroot]
In file included from bspline.c:3:
In file included from ./pomp_internal.h:6:
/Library/Frameworks/R.framework/Resources/include/R.h:55:11: fatal error: 'stdlib.h' file not found
# include <stdlib.h> /* Not used by R itself, but widely assumed in packages */
          ^~~~~~~~~~
1 error generated.
make: *** [bspline.o] Error 1
ERROR: compilation failed for package ‘pomp’
* removing ‘/Users/Atorneri/Library/R/3.6/library/pomp’
* restoring previous ‘/Users/Atorneri/Library/R/3.6/library/pomp’
Error: Failed to install 'pomp' from GitHub:
  (converted from warning) installation of package ‘/var/folders/w7/v79h1vtd38579k18skjw2w280000gn/T//RtmpDSox3s/file3547ba46d4e/pomp_2.2.0.0.tar.gz’ had non-zero exit status

【问题讨论】:

  • 消息的重要部分是clang: warning: no such sysroot directory: '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk' [-Wmissing-sysroot]。构建选项-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 来自哪里?
  • @Someprogrammerdude 感谢您指出这一点。对不起,我不是这样的专家,我不明白你的问题......

标签: xcode macos clang


【解决方案1】:

也许 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 未找到。您可以尝试将 xcode 切换到 xcode 应用程序。
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

【讨论】:

  • 我试过但不幸的是这不起作用。它给了我同样的错误
  • 尝试用/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk替换isysroot中的路径
  • 这更像是一个评论而不是一个答案。请阅读How do I write a good answer?
【解决方案2】:

在终端运行 xcode-select --install 为我解决了这个问题。

【讨论】:

  • 立即为我工作!谢谢。
【解决方案3】:

我通过创建符号链接为同事解决了这个问题。

这是我的文件系统:

pi@piPro18 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
> ls -la
total 0
drwxr-xr-x  5 root  wheel  160 21 Sep 14:05 .
drwxr-xr-x  6 root  wheel  192 11 Sep 12:47 ..
drwxr-xr-x  4 root  wheel  128 30 Aug 07:47 DriverKit19.0.sdk
drwxr-xr-x  8 root  wheel  256 30 Aug 07:47 MacOSX.sdk
lrwxr-xr-x  1 root  wheel   10 21 Sep 14:02 MacOSX10.14.sdk -> MacOSX.sdk

他错过了那个符号链接。所以我们创建了它:

sudo ln -s MacOSX.sdk MacOSX10.14.sdk

来自https://github.com/mapnik/python-mapnik/issues/167

最近(?),Apple 决定停止使用版本命名他们的 SDK,而是将它们命名为 MacOSX.sdk 并在版本名称中包含一个别名以实现兼容性

对我来说,剩下的一个谜是为什么我有符号链接而我的同事没有。如果有人可以解释这一点,请发表评论。

【讨论】:

  • 在我尝试启动清漆缓存时为我工作。
【解决方案4】:

我按照所有提示更新R COMPILER TOOLS FOR RCPP ON MACOS。 使用 MacOS X Catalina 10.15 和 R 版本 3.6.1 (2019-07-05) -- "Action of the Toes" on Platform: x86_64-apple-darwin15.6.0 (64-bit)。

不是我自己的想法/知识,而是由https://superuser.com/a/1490988/918146提供的

【讨论】:

    【解决方案5】:

    我在 iOS 项目中也遇到过这个问题。该项目是为 iOS 13.5 构建的(尽管我将目标设置为 13.0)。突然,一切都在后台更新到了 13.6,编译器再也找不到 13.5 SDK 的引用了。我检查了 SDK 应该所在的文件夹(基于错误消息),我发现

    drwxrwxr-x  7 root  wheel  [...] iPhoneSimulator.sdk
    lrwxr-xr-x  1 root  wheel  [...] iPhoneSimulator13.6.sdk -> iPhoneSimulator.sdk
    

    但没有 13.5。因此,在 Thanh Vu 之后,我创建了链接

    sudo ln -s iPhoneSimulator.sdk iPhoneSimulator13.5.sdk
    

    这解决了问题。现在所有模拟器都以 13.6 运行。

    【讨论】:

      【解决方案6】:

      我解决了同样的问题:

      sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
      

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2011-10-01
        • 2019-07-12
        • 1970-01-01
        相关资源
        最近更新 更多