配置带OpenMP的Makevars后R安装stringi报C compiler cannot create executables的方案问询
我经常从源码安装R包,需要正确配置~/.R/Makevars来完成操作。我需要使用OpenMP,因此从网上复制了一份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
我已找不到这份配置的原始来源,它和公开的同类OpenMP适配配置逻辑相似。
这份Makevars运行正常,但安装stringi等少数包时会报"C compiler cannot create executables"错误。我发现如果从CFLAGS和CXXFLAGS中移除-fopenmp标识,该报错通常会消失,因此我在Makevars中预留了带/不带-fopenmp的两套配置,方便手动切换。
目前这套临时方案可以正常使用,和常见的「直接删除整个Makevars文件」的方案效果一致。但我想知道是否存在更优的解决方案:每次安装包都要手动切换配置很麻烦,部分包不兼容-fopenmp标识会导致安装失败,但若移除该标识又会导致部分包无法使用OpenMP加速。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

