【问题标题】:Unable to load shared object in R compiled with gfortran : undefined symbol: _gfortran_st_close无法在使用 gfortran 编译的 R 中加载共享对象:未定义符号:_gfortran_st_close
【发布时间】:2021-06-08 16:55:10
【问题描述】:

我在 R 中使用的代码依赖于从 R 编译的另一个 fortran 代码。

完全相同(收集)的代码在另一台笔记本电脑上也能正常工作,所以这可能是外部库的问题。

尝试加载“.so”对象时出现错误:

    dyn.load("./Build/bamhbi_interface.so")

这导致此错误消息让我没有解决方案:

Error in dyn.load("./Build/bamhbi_interface.so") : 
  unable to load shared object './Build/bamhbi_interface.so':
  ./Build/bamhbi_interface.so: undefined symbol: _gfortran_st_close

上下文

  • Ubuntu 20.04
  • R 版本 3.6.3 (2020-02-29)
  • GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
  • fortran 代码是使用
  • 编译的
  system("R CMD COMPILE bamhbi_alkalinity.f90")
  system("R CMD COMPILE bamhbi_nemo2r.f90")
  [...]
  system("R CMD COMPILE bamhbi_interface.f90")

  system("R CMD SHLIB -o bamhbi_interface.so bamhbi_alkalinity.o bamhbi_nemo2r.o [...] bamhbi_diagnostics.o bamhbi_interface.o")
  • 由于我使用的是 '~/.R/Makevars' 文件,因此编译命令相当于:

gfortran -fno-optimize-sibling-calls -fpic -cpp -fdefault-real-8 -ffree-line-length-512 -O2 -fdebug-prefix-map=/build/r-base-3.6.3=. -fstack-protector-strong -c bamhbi_nemo2r.f90 -o bamhbi_nemo2r.o

gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o bamhbi_interface.so bamhbi_alkalinity_vars.o bamhbi_alkalinity.o benthic_metamodels.o bamhbi.o bamhbi_sinking.o bamhbi_nemo2r.o bamhbi_diagnostics.o bamhbi_interface.o -L/usr/lib/R/lib -lR 用于 R CMD SHLIB 步骤

【问题讨论】:

  • 您还需要加载libgfortran
  • 谢谢@VladimirF!这似乎很有希望,但不幸的是,我的理解还不够。你介意提供更多细节吗?如:这应该在哪一步做,怎么做?

标签: r shared-libraries gfortran .so


【解决方案1】:

@vladimir-f 提供了答案:

用 -lgfortran 补充链接命令以加载 libgfortran 就可以了:

 system("R CMD SHLIB -o bamhbi_interface.so bamhbi_alkalinity.o bamhbi_nemo2r.o [...] bamhbi_diagnostics.o bamhbi_interface.o -lgfortran")

【讨论】:

  • 我遇到了与未定义的 gfortran 符号相同的问题...使用 install.packages(),有没有办法可以在 Makevars 中添加这个标志?我目前有 FLIBS=-L/usr/bin/gfortran 和 F77=/usr/bin/gfortran 但没有工作..
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多