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

时间:2016-01-20 17:43:34

标签: r gcc openmp

我正在尝试在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中。
  3. 这可能是一件我想念的简单事情,但我试图寻找合适的答案但没有成功。

    高级感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我遇到同样的问题:

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.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 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 -lm array.o:在函数do_colsum': /home/myaccount/Downloads/R-patched/src/main/array.c:1437: undefined reference to GOMP_parallel'中 collect2:错误:ld返回1退出状态 Makefile:144:目标'R.bin'的配方失败

这是R(autotools问题)的配置问题。我的电脑有gcc 4.8(附带操作系统)和最新版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)

Edite第144行:

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

这解决了我的问题。我很难在R项目中提交错误。如果R开发人员看到这一点,他们可以在自动配置级别修复此问题吗?自动探测只需要更聪明一点。