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

誰かが理由を知っていますか?私はMacosxLionを使用しており、Rv2.15.0とgfortran4.6.2を使用しています。

ありがとうございました!

4

2 に答える 2

3

自分が何をしているのかを本当に理解していない限り、 Rツールに付属しているgfortranを使用する必要があります。4.2ランタイム環境で4.6gfortranを使用してコンパイルされたコードを実行しようとしているため、libgccにシンボルがないことは驚くべきことではありません。

于 2012-08-16T06:49:17.710 に答える
2

Rのビルドに使用されたgfortranバージョンのみを使用できます。Lionを使用していて、おそらくXcodeがインストールされているため、ここから適切なバージョンのgfortranを入手できます。http://r.research.att.com/tools/ Go 「AppleXcodegcc-42アドオン」のセクションに移動し、適切なバージョンを選択します。

gfortran 4.6.2を完全に削除するか、可能であればPATHを変更してアクセスできないようにする必要があります(/ opt / ...にない限り、これは疑わしいです)。

また、R CMD SHLIBを使用すると、コンパイラとリンカに正しいオプションが渡されます。

于 2012-08-16T09:12:50.143 に答える