ld:未知选项:-platform_version 从源构建 R 包时
ld: unknown option: -platform_version when building R packages from source
某些 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
是基于 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
来完成的,然后为所有 C++ 版本将标志添加到 CXX**FLAGS
。
更新,2020 年 6 月 24 日:不幸的是,一些软件包(在我的例子中是 rJava)无法使用 STD_FLAGS
。我的解决方法是将 mlinker 标志放在 C 编译器调用中:
CC=$(CCACHE) $(HO)/llvm/bin/clang -mlinker-version=305
某些 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
是基于 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
来完成的,然后为所有 C++ 版本将标志添加到 CXX**FLAGS
。
更新,2020 年 6 月 24 日:不幸的是,一些软件包(在我的例子中是 rJava)无法使用 STD_FLAGS
。我的解决方法是将 mlinker 标志放在 C 编译器调用中:
CC=$(CCACHE) $(HO)/llvm/bin/clang -mlinker-version=305