ld:未知选项:-从源代码构建R包时的平台版本

ld:未知选项:-从源代码构建R包时的平台版本,r,clang,ld,R,Clang,Ld,某些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=305添加到LDFLAGS到Makevars文件中,该文件通常位

某些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=305
添加到
LDFLAGS
Makevars
文件中,该文件通常位于
$HOME/.R/

我的
Makevars
基于。我从以下位置更改了
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++标志中。在GIST代码> MakEvARs/COD>上面,这是通过添加< C++ > MLIKER版本=305 < /COD> > <代码> STDYFLAGG/<代码>,然后将标志添加到所有C++版本的<代码> CXX**标志< /代码>。 更新,2020年6月24日:不幸的是,一些软件包(在我的例子中是rJava)无法使用
STD_标志
。我的解决方法是将mlinker标志放在C编译器调用中:

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