某些 R 包,例如 mgcv
,无法使用 clang 10+ 从源代码编译(在 macOS 10.14 和 R 版本 3.6+ 下)。编译时报错为
ld: unknown option: -platform_version
如何解决此错误并编译这些包?
最佳答案
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
这解决了从源代码编译 mgcv
时的 ld
错误。
对于 igraph
包,将 mlinker
标志添加到 LDFLAGS
是不够的;它也必须添加到 C++ 标志中。在上面的要点 Makevars
中,这是通过将 -mlinker-version=305
添加到 STD_FLAGS
来完成的,然后将标志添加到 CXX**FLAGS
适用于所有 C++ 版本。
更新,2020 年 6 月 24 日:不幸的是,一些包(在我的例子中是 rJava)无法使用 STD_FLAGS
。我的解决方法是将 mlinker 标志放在 C 编译器调用中:
CC=$(CCACHE) $(HO)/llvm/bin/clang -mlinker-version=305
关于r - ld:未知选项:-platform_version 从源构建 R 包时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61103104/