某些R软件包(例如mgcv
)无法使用clang 10+(在macOS 10.14和R版本3.6+下)从源代码进行编译。编译期间报告的错误是
ld: unknown option: -platform_version
如何解决此错误并编译这些软件包?
答案 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