【发布时间】: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