【发布时间】:2021-12-06 17:46:42
【问题描述】:
我经常从源代码安装 R 包,并且需要正确配置的 ~/.R/Makevars 来执行此操作。我希望能够使用OpenMP,所以我复制了一个我在网上找到的Makevars。我的Makevars 最终变成了这样:
OPT_LOC = $(HOME)/homebrew/opt
LLVM_LOC = $(OPT_LOC)/llvm
CC=$(LLVM_LOC)/bin/clang
CXX=$(LLVM_LOC)/bin/clang++
# CFLAGS and CXXFLAGS *with* -fopenmp
CFLAGS=-fopenmp -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-fopenmp -g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
# CFLAGS and CXXFLAGS *without* -fopenmp
# (sometimes the package install process fails if -fopenmp is present)
# CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
# CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
LDFLAGS=-L$(OPT_LOC)/gettext/lib -L$(LLVM_LOC)/lib -Wl,-rpath,$(LLVM_LOC)/lib
CPPFLAGS=-I$(OPT_LOC)/gettext/include -I$(LLVM_LOC)/include
我找不到我的版本的原始来源,但它类似于this one。
我的 Makevars 工作得很好,除了一些包,比如 stringi。这些包抱怨"C compiler cannot create executables"。我发现如果我从CFLAGS 和CXXFLAGS 中删除-fopenmp,这个错误通常会消失。如您所见,我已经设置了Makevars,因此我可以轻松地在使用-fopenmp 和不使用-fopenmp 的配置之间来回切换。
我的解决方法可以正常工作,就像上面链接的 Stack Overflow 帖子中“完全删除 Makevars”的解决方法一样。但是没有更好的方法吗?令人讨厌的是,由于这些依赖项讨厌 -fopenmp 标志,我无法期望软件包安装成功,而删除该标志意味着我可能会在某些软件包安装中错过 OpenMP。
【问题讨论】:
标签: r clang openmp llvm stringi