r - ld:未知选项:-platform_version 从源构建 R 包时

标签 r clang ld

某些 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/

相关文章:

r - 投资组合分析包中的自定义预期返回

r - 提取数据框中每个元素的前n个值的索引

objective-c - clang 的哪些编译选项改变了它们在 Objective C 和 Objective C++ 之间的默认值?

c++ - 使 ld 忽略/etc/ld.so.conf 中的目录

gcc - 使用链接描述文件显式设置起始堆栈指针

r - 在 ggplot2 中将颜色分配给因子值不起作用

dtw 中用于包装的 R 自定义代理函数

使用 emscripten boost bjam

c++ - GCC c++11 使用大量带有 STL 位集 <UINT_MAX> 的 RAM

C++ ld 链接器 --wrap 选项不适用于内部函数调用