使用 gcc OpenMP 支持从源构建 R 时出错

Error while building R from source with gcc OpenMP support

我正在尝试在 HPC 集群上的 Redhat linux 环境中编译 R。我使用环境模块来安装许多工具的最新版本,包括 GCC 5.2.0。我无法让 R 从源代码构建。它因未定义引用“GOMP_parallel”而失败。当我使用 --disable-openmp 选项编译时,它编译正常。

array.o: In function `do_colsum':
array.c:(.text+0x5829): undefined reference to `GOMP_parallel'
collect2: error: ld returned 1 exit status
make[3]: *** [R.bin] Error 1
make[3]: Leaving directory `/scratch/kokul/240763.hpc5/R-  3.2.3/src/main'
make[2]: *** [R] Error 2
make[2]: Leaving directory `/scratch/kokul/240763.hpc5/R- 3.2.3/src/main'
make[1]: *** [R] Error 1
make[1]: Leaving directory `/scratch/kokul/240763.hpc5/R-3.2.3/src'
make: *** [R] Error 1

几个问题

  1. 启用 openMP 有什么好处,我假设这会提高性能?
  2. 如何修复构建时遇到的错误?这与链接正确的库有关吗? -fopenmp 在构建时被正确使用。 libgomp.* 文件也在 $LIBRARY_PATH 和 $LD_LIBRARY_PATH.

这可能是我遗漏的一件简单的事情,但我试图寻找正确的答案但没有成功。

非常感谢您的帮助。

我遇到了同样的问题:

gcc -Wl,--export-dynamic -fopenmp -L/usr/local/lib -o R.bin Rmain.o CommandLineArgs.o Rdynload.o Renviron.o RNG.o agrep.o apply.o arithmetic.o array.o attrib.o bind.o builtin.o character.o coerce.o colors.o complex.o connections.o context.o cum.o dcf.o datetime.o debug.o deparse.o devices.o dotcode.o dounzip.o dstruct.o duplicate.o edit.o engine.o envir.o errors.o eval.o format.o gevents.o gram.o克-ex.o graphics.o grep.o identical.o inlined.o inspect.o internet.o iosupport.o lapack.o list.o localecharset.o logic.o main.o mapply.o match.o memory.o names.o objects.o options.o paste.o platform.o plot.o plot3d.o plotmath.o print.o 打印array.o printvector.o printutils.o qsort.o radixsort.o random.o raw.o registration.o relop.o rlocale.o saveload.o scan.o seq.o serialize.o sort.o source.o split.o sprintf.o startup.o subassign.o subscript.o subset.o summary.o sysutils.o times.o unique.o util.o version.o g_alab_her.o g_cntrlify.o g_fontdb.o g_her_glyph.o xxxpr.o ls ../unix/*.o ../appl/*.o ../nmath/*.o ../extra/tre/libtre.a -L../../lib -lRblas -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -lgfortran -lm -lquadmath -lreadline -lpcre -llzma -lbz2 -lz -lrt -ldl -lm array.o: 在函数中 do_colsum': /home/myaccount/Downloads/R-patched/src/main/array.c:1437: undefined reference toGOMP_parallel' collect2:错误:ld 返回 1 退出状态 Makefile:144:目标 'R.bin' 的配方失败

这是 R 的配置问题(autotools 问题)。我的电脑有 gcc 4.8(附带 OS)和最新版本的 gcc 5.2(我从源代码构建)。 gcc 5.2 位于 /usr/local

我看到 R 将这两者混为一谈,并没有选择 5.2 库位置。

我更改了 Makefile(这只是一次修复,因为 make 文件是由 autotool 生成的)。

首先进入src/main目录。然后编辑 Makefile:

143 $(R_binary): $(R_bin_OBJECTS) $(R_bin_DEPENDENCIES) 144$(MAIN_LINK)-o $@$(R_bin_OBJECTS)$(R_bin_LDADD)

编辑第 144 行:

144 $(MAIN_LINK) -o $@ $(R_bin_OBJECTS) -L/usr/local/lib64 -lgomp $(R_bin_LDADD)

这解决了我的问题。我很难用 R 项目提交错误。如果 R 开发人员看到了这一点,他们能否在自动配置级别修复此问题?自动探测必须更智能一点。