某些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
从源代码编译ld
时解决了mgcv
错误。
对于igraph
包,在mlinker
上添加LDFLAGS
标志是不够的;它也必须添加到C ++标志中。在上面的要点Makevars
中,这是通过在-mlinker-version=305
上添加STD_FLAGS
来完成的,然后将所有C ++版本的标志添加到CXX**FLAGS
。