2017-05-19 17 views
0

いくつかのFortranモジュール/サブルーチンを共有ライブラリにリンクする際に問題があります。Fortranで複数のソースファイルから1つのライブラリにリンクする共有オブジェクト

まず、スタンドアロンのFortranプログラムがありました。すべてがうまくいっています。これは

main.f95 
mymodule.f95 
myutils.f95 

から構成さしかし、私はそうR.

からのFortranコードを呼び出すことができるようになりました私は物事を適応しています、私は、メインプログラムmain.f95を破棄し、私は新しいファイルを持っている、のは言わせてこのルーチンは、モジュールmymoduleを使用しなければならないR.から呼び出されるサブルーチンが含まれており、このモジュールはmyutilsに依存してい

callFromR.f95 

。 私は共有オブジェクトとしてそれらのすべての3つをコンパイルします。

gfortran -shared -fPIC callFromR.f95 -o callFromR.so 
gfortran -shared -fPIC mymodule.f95 -o mymodule.so 
gfortran -shared -fPIC myutils.f95 -o myutils.so 

今、私は何とか共有オブジェクトファイル(いないオブジェクトファイル)でそれらのすべての3つを組み合わせる必要があります。これどうやってするの?

(私はRでcallFromRサブルーチンを呼び出すときにその結果、mymoduleコードの中に配置されているいくつかのサブルーチンが見つかりません。)

+0

それは、それらが見つからないという意味ですか? 3つの.soファイル、または1つだけをインポートしますか? –

答えて

0

あなたが最初のオブジェクトファイルに

gfortran -c -fPIC callFromR.f95 -o callFromR.o 
gfortran -c -fPIC mymodule.f95 -o mymodule.o 
gfortran -c -fPIC myutils.f95 -o myutils.o 

を作成してパックすることができますそれらを図書館に入れる

gfortran -shared callFromR.o mymodule.o myutils.o -o callFromR.so 
+0

そのようにして、コンパイルによってメインに未定義の参照が与えられます... /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: Funktion '_start ': (.text + 0x20):Nicht definierter Verweis auf' main' collect2:エラー:ldが1を返しました。終了ステータス – jenna

+0

'-c'フラグを忘れました。多くの質問と回答はその誤りを説明しています。 –

+0

ありがとう、それは私が作ったダミーの例でコンパイルされます。Rからの呼び出しが後で動作するかどうかをテストする – jenna

関連する問題