我做了一个简单的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
有谁知道为什么?我正在使用mac osx Lion,R v2.15.0和gfortran 4.6.2。
谢谢!
答案 0 :(得分:3)
除非你真的了解自己在做什么,否则你应该使用R tools附带的gfortran。 libgcc中缺少的符号并不令人惊讶,因为您尝试在4.2运行时环境中运行使用4.6 gfortran编译的代码。
答案 1 :(得分:2)
您只能使用用于构建R的gfortran版本。 由于您在Lion上并且可能安装了Xcode,因此您可以从此处获取相应版本的gfortran:http://r.research.att.com/tools/ 转到“Apple Xcode gcc-42附加组件”部分并选择合适的版本。
如果可能的话,你必须彻底摆脱你的gfortran 4.6.2或通过改变PATH使它无法进入(我怀疑除非它在/ opt /...).
并且使用R CMD SHLIB,因为这会将正确的选项传递给编译器和链接器。