3

移植性の理由から、gfortranを使用して共有ライブラリを作成し、静的バージョンのlibgfortranとリンクさせたいと思います。残念ながら、私はさまざまなオブジェクトを適切にリンクすることができません。同様の問題に対処する投稿をすでにいくつか見つけましたが、問題を解決する方法がわかりませんでした。

私のソースファイルはすべて-fPICフラグを付けてコンパイルされています。-sharedオブジェクトをフラグとにリンクしようとすると-static-libgfortran、次のエラーメッセージが表示されます。

gfortran -shared -static-libgfortran file1.o file2.o file3.o -o "mynewlib.so"
/usr/bin/ld: ../lib64/libgfortran.a(error.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../lib64/libgfortran.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

サーバー上で最初からコンパイルしたgfortran4.6.3を使用しています。インストールはスムーズに実行され、標準構成は変更しませんでした。古い投稿で、コンパイラをで構成する必要があることがわかりました--with-picが、このフラグはGCCマニュアルに記載されていません。

問題はコンパイラーに起因するのでしょうか、それとも異なるオブジェクトをリンクしようとしている方法に起因するのでしょうか?どうすればこれを修正できますか?

よろしくお願いします!

4

1 に答える 1

3

libgfortran静的バージョンを使用する場合、 はフラグを使用してコンパイルされませ-fPICん (したがって、位置に依存しないコードは含まれません)。

libfgortranしたがって、共有オブジェクトに (静的に)リンクすることはできません。

ライブラリを適切に (たとえば、.debDebian や Ubuntu のファイルとして)gfortranパッケージ化し、パッケージの依存関係に追加することをお勧めします。

于 2012-10-20T14:23:10.960 に答える