2

我做了一个简单的fortran例程

subroutine add(x,y)
    real(8) :: x,y

    y = x + 3
end subroutine

保存为 test.f90。

我编译

gfortran -shared test.f90 -o test.so

在 R 中(在同一目录中),我使用

dyn.load('test.so')

但它给了我这个错误:

Error in dyn.load("test.so") : 
  unable to load shared object '/Users/Steven/Documents/PhD/npsR/test.so':
  dlopen(/Users/Steven/Documents/PhD/npsR/test.so, 6): Symbol not found: ___addtf3
  Referenced from: /usr/local/gfortran/lib/libquadmath.0.dylib
  Expected in: /Library/Frameworks/R.framework/Resources/lib/libgcc_s.1.dylib
 in /usr/local/gfortran/lib/libquadmath.0.dylib

有谁知道为什么?我正在使用带有 R v2.15.0 和 gfortran 4.6.2 的 mac osx Lion。

谢谢!

4

2 回答 2

3

除非您真的了解自己在做什么,否则您应该使用R tools附带的 gfortran 。libgcc 中缺少的符号并不奇怪,因为您尝试在 4.2 运行时环境中运行使用 4.6 gfortran 编译的代码。

于 2012-08-16T06:49:17.710 回答
2

您只能使用用于构建 R 的 gfortran 版本。由于您在 Lion 上并且可能安装了 Xcode,您可以从此处获取适当版本的 gfortran:http : //r.research.att.com/tools/到部分:“Apple Xcode gcc-42 add-ons”并选择适当的版本。

如果可能的话,您必须完全摆脱您的 gfortran 4.6.2 或通过更改 PATH 使其无法访问(我怀疑除非它位于 /opt/...)。

并且使用 R CMD SHLIB 因为这会将正确的选项传递给编译器和链接器。

于 2012-08-16T09:12:50.143 回答