ld:未知选项:从源代码构建R软件包时-platform_version

时间:2020-04-08 14:26:21

标签: r clang ld

某些R软件包(例如mgcv)无法使用clang 10+(在macOS 10.14和R版本3.6+下)从源代码进行编译。编译期间报告的错误是

ld: unknown option: -platform_version

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

1 个答案:

答案 0 :(得分:1)

ld的问题与Clang 10 fails to link C++ application with CMake on macOS 10.12中的问题相同。但是,添加标志-DCMAKE_CXX_FLAGS="-mlinker-version=305"的建议不适用于R包编译过程。对于R,您需要将-mlinker-version=305中的LDFLAGS添加到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

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

对于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