Data.table: 在macOS上使用gcc作为默认编译器?

创建于 2019-10-31  ·  5评论  ·  资料来源: Rdatatable/data.table

在阅读并尝试了macOS的编译器说明之后,我想知道从homebrew来的gcc是否比llvm更好。

如Wiki中所述,启用了openmp的编译器会导致其他程序包出现问题。 如果要编译其他软件包,则始终注释掉llvm编译器是很麻烦的。

目前,我正在使用通过brew install gcc安装gcc的以下设置。 到目前为止,任何软件包都没有问题。

CXX_STD = CXX14

CC=ccache /usr/local/bin/gcc-9
CC11=ccache /usr/local/bin/gcc-9
CC14=ccache /usr/local/bin/gcc-9
CXX=ccache /usr/local/bin/g++-9
CXX11=ccache /usr/local/bin/g++-9
CXX14=ccache /usr/local/bin/g++-9
## -O3 should be faster than -O2 (default) level optimisation ..
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe

另外,如您所见,我正在使用ccache 。 结合下面的~/.ccache/ccache.conf设置,我有了一个支持缓存的健壮的C编译器设置。

max_size = 5.0G
# important for R CMD INSTALL *.tar.gz as tarballs are expanded freshly -> fresh ctime
sloppiness = include_file_ctime
# also important as the (temp.) directory name will differ
hash_dir = false

(该ccache部分摘自这篇文章由德克。)

install platform-specific question

最有用的评论

我正在使用https://github.com/rmacoslib/r-macos-rtools中建议的方法。 我使用https://cloud.r-project.org/bin/macosx/tools提供的clang7,只需在~/.R/Makevars指定以下内容:

CC=/usr/local/clang7/bin/clang
CXX=/usr/local/clang7/bin/clang++
CXX1X=/usr/local/clang7/bin/clang++
CXX11=/usr/local/clang7/bin/clang++
CXX14=/usr/local/clang7/bin/clang++
CXX17=/usr/local/clang7/bin/clang++
LDFLAGS=-L/usr/local/clang7/lib

一切都可以顺利,一致地进行。

我不确定macOS的说明为何如此复杂,即使使用源代码的最新data.table ,使用macOS的初学者也很容易遇到困难。

所有5条评论

我正在使用https://github.com/rmacoslib/r-macos-rtools中建议的方法。 我使用https://cloud.r-project.org/bin/macosx/tools提供的clang7,只需在~/.R/Makevars指定以下内容:

CC=/usr/local/clang7/bin/clang
CXX=/usr/local/clang7/bin/clang++
CXX1X=/usr/local/clang7/bin/clang++
CXX11=/usr/local/clang7/bin/clang++
CXX14=/usr/local/clang7/bin/clang++
CXX17=/usr/local/clang7/bin/clang++
LDFLAGS=-L/usr/local/clang7/lib

一切都可以顺利,一致地进行。

我不确定macOS的说明为何如此复杂,即使使用源代码的最新data.table ,使用macOS的初学者也很容易遇到困难。

对我来说, gcc方法是迄今为止最快,最稳定的方法。
我不确定这会在macOS上带来什么其他警告。 🤔

@jangorecki谁负责{data.table}中与C相关的部分,或者可能对幕后发生的事情有更深入的了解?

gcc是所有主要Linux发行版上使用的编译器,是否有什么阻止它将其设置为macOS上的默认值?

DT的C部分没有一个人负责。 Matt和Arun编写了大部分C知识。 AFAIR @arunsrinivasan在macOS上,因此他对这个问题的看法可能会很有帮助。

我更喜欢自己使用gcc,但是碰巧clang是MacOS上的默认设置。 尝试为Mac用户全局更改默认编译器将导致更多问题,而不是解决的问题。 因此,我不认为更改默认设置是可行的方法。
既然https://github.com/Rdatatable/data.table/pull/4735已合并(并且已经以1.13.2的形式发布到CRAN),则用户应该能够更轻松地自定义其data.table的构建。 因此,它应该解决您的用例。 如果没有,请告诉我们。

嗨,@ pat-s。 感谢您在这里的输入。 我要补充一点,如果可以简化“安装”页面上的MacOS说明,那将是非常受欢迎的。 请继续并直接自己对Wiki进行更改。 不需要更改Wiki的权限,这就是我们使它成为Wiki的原因。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

alex46015 picture alex46015  ·  3评论

franknarf1 picture franknarf1  ·  3评论

mattdowle picture mattdowle  ·  3评论

tcederquist picture tcederquist  ·  3评论

andschar picture andschar  ·  3评论