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

标签 r gcc openmp

我正在尝试在 HPC 集群上的 Redhat Linux 环境中编译 R。我使用环境模块安装了许多工具的最新版本,包括 GCC 5.2.0。我无法从源代码构建 R。它因对“GOMP_parallel”的 undefined reference 而失败。当我使用 --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 算术。 o 数组.o attrib.o 绑定(bind).o 内置.o 字符.o 强制.o 颜色.o 复杂.o 连接.o 上下文.o cum.o dcf.o 日期时间.o 调试.o 分离.o 设备.o 点码.o dounzip.o dstruct.o 重复.o 编辑.o 引擎.o 环境.o 错误.o eval.o 格式.o gevents.o gram.o gram-ex.o 图形.o grep.o 相同.o 内联.o 检查.o 互联网.o iosupport.o lapack.o 列表.o localecharset.o 逻辑.o main.o mapply.o 匹配.o 内存.o 名称.o 对象.o 选项.o 粘贴.o 平台.o plot.oplot3d.oplotmath.oprint.oprintarray.oprintvector.oprintutils.oqsort.oradixsort.orandom.oraw.oregistration.orelop.orlocale.osaveload.oscan.oseq。 o 序列化.o 排序.o 源.o 分割.o sprintf.o 启动.o 子分配.o 下标.o 子集.o 摘要.o sysutils.o 时间.o 唯一.o util.o 版本.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 的配置问题(自动工具问题)。我的计算机有 gcc 4.8(随操作系统一起提供)和最新版本的 gcc 5.2(我从源代码构建)。 gcc 5.2 位于/usr/local

我看到 R 将这两者混合在一起,并且没有选择 5.2 库位置。

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

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

143 $(R_binary): $(R_bin_OBJECTS) $(R_bin_DEPENDENCIES) 分段阅读_第 144 章

编辑第 144 行:

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

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

关于r - 使用 gcc OpenMP 支持从源代码构建 R 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906938/

相关文章:

r - 查找并替换列名

r - 如何计算栅格堆栈列表中的栅格数量

c - 从红外传感器获取中断

c++ - libcurl在windows上的静态库

c++ - 调试堆栈值损坏的好方法

parallel-processing - openmp矩阵乘法

c++ - 并发读/写 OpenMp 中的共享变量

r - 如何检查一组列是否是 R 中数据框的超键?

r - 为什么惰性求值不会破坏这段代码?

gcc - 使用 Homebrew 软件在 Mac 上安装支持 OpenMP 的 gcc 没有效果