从支持 gcc OpenMP 的源代码构建 R 时出错



我正在尝试在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 gram-ex.o graphics.o grep.o identical.o inlined.o inspect.o internet.o iosupport.o lapack.olist.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 plot.o plot3d.o plotmath.o print.o printarray.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 -lmarray.o:在函数do_colsum': /home/myaccount/Downloads/R-patched/src/main/array.c:1437: undefined reference to GOMP_parallel'collect2:错误:ld 返回 1 个退出状态生成文件:144:目标"R.bin"的配方失败

这是来自 R(自动工具问题)的配置问题。 我的电脑同时有 gcc 4.8(附带操作系统)和最新版本的 gcc 5.2(我从源代码构建)。gcc 5.2 位于/usr/local

我看到 R 将这两者混合在一起,而不是拾取 5.2 库位置。

我更改了生成文件(这只是一次性修复,因为生成文件是由自动工具生成的)。

首先转到 src/main 目录。然后编辑生成文件:

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 开发人员看到这一点,他们能否在自动配置级别解决此问题? 自动探测只需要更智能一点。

最新更新