特定の(しばしば競合する)ライブラリにコンパイルする必要がある従来のコードがたくさんあります。具体的には、 でのみコンパイルできるプログラムと、 でのみg77
使用できるプログラムがありますgfortran
。
最初のプログラムを呼び出そうマケイそして第二番組UVES_popler。
コンパイル(および実行)するときは両方ともリンクする必要があります。絵これは対応するコンパイラでコンパイルされます。だから、コンパイルマケイg77で実行する必要があります絵g77
これもまとめました。そしてそれぞれ同じです。UVES_poplerそしてgfortran
。
g77とgfortranを使ってpgplotをコンパイルできると仮定すると、bashrcを設定するベストプラクティスは何ですか?各プログラムに対してbash機能を作成し、正しいリンクとLD_LIBRARY_PATH
sを持つ必要がありますか?それは次のとおりです。
runmakee() {
export LD_LIBRARY_PATH=/path/to/g77-pgplot/
makee
}
そして(おそらく関連があるかもしれませんが)、これらのプログラムが別々にコンパイルされたときに正しいライブラリが呼び出されるようにMakefileにフラグを設定する方法はありますか?
答え1
Bash機能は機能するはずですが、「一般的な」アプローチは、各実行可能ファイルのラッパースクリプトを作成し、その中に設定する必要があるすべての項目を設定することです。 (たとえば、実行可能ファイルの名前を変更し、foo.bin
より簡単に呼び出すためにラッパースクリプトを呼び出すことができますfoo
。)
ELFターゲットの場合(他のオブジェクトタイプは不明です)、-rpath
リンカオプションを設定して実行可能ファイルからランタイムライブラリの検索パスを直接ハードコードすることもできます。 gcc(Cコード用)を使用すると、最終接続手順は次のようになります。
gcc ... -Wl,-rpath,/your/hardcoded/path ...
Fortranコンパイラにも同様のオプションがあるか、リンカオプションを直接変更できるとします(この場合はオプション-rpath /your/path
)。