ld:未知选项:-platform_version 从源构建 R 包时

ld: unknown option: -platform_version when building R packages from source

某些 R 包,例如 mgcv,无法使用 clang 10+ 从源代码编译(在 macOS 10.14 和 R 版本 3.6+ 下)。编译报错为

ld: unknown option: -platform_version

如何解决此错误并编译这些包?

ld 的问题与 的问题相同。但是,添加标志 -DCMAKE_CXX_FLAGS="-mlinker-version=305" 的建议不适用于 R 包编译过程。对于 R,您需要将 -mlinker-version=305LDFLAGS 添加到您的 Makevars 文件,通常位于 $HOME/.R/.

我的 Makevars 是基于 this GitHub gist。我从这里更改了 LDFLAGS

LDFLAGS+=-L$(HO)/llvm/lib -Wl,-rpath,$(HO)/llvm/lib

对此:

LDFLAGS+=-L$(HO)/llvm/lib -Wl,-rpath,$(HO)/llvm/lib -mlinker-version=305

解决了从源代码编译 mgcv 时的 ld 错误。

对于 igraph 包,将 mlinker 标志添加到 LDFLAGS 是不够的;它也必须添加到 C++ 标志中。在上面的要点 Makevars 中,这是通过将 -mlinker-version=305 添加到 STD_FLAGS 来完成的,然后为所有 C++ 版本将标志添加到 CXX**FLAGS

更新,2020 年 6 月 24 日:不幸的是,一些软件包(在我的例子中是 rJava)无法使用 STD_FLAGS。我的解决方法是将 mlinker 标志放在 C 编译器调用中:

CC=$(CCACHE) $(HO)/llvm/bin/clang -mlinker-version=305