2017-10-04 5 views
1

クラスタ上でGNU scientific library library(GSL)を必要とするコード(iHARM2D)を実行しています。 GSLライブラリはクラスタにインストールされていないので、そこでコンパイルして、実際のコードのコンパイル時に適切にリンクする必要があります。私のシェルスクリプトでは、私はこれがGSLをコンパイルし、/ homefolder/iHARM/GSLcompiled/libに結果を置くクラスタ上のGNU科学ライブラリにリンクしていますか?

cd whereGSLsource 
./configure --prefix=/homefolder/iHARM/GSLcompiled 
make && make install 

書き込み、/ homefolder/iHARM/GSLcompiled /含めるなどthis answerによると

、Iコンパイルが `にタイプ「未定義の参照のエラーを返すので、私のメインのコード

export CPATH="/homefolder/iHARM/GSLcompiled/include":$CPATH 
export LIBRARY_PATH="/homefolder/iHARM/GSLcompiled/lib":$LIBRARY_PATH 

のコンパイルの前に私のシェルスクリプトに以下の行を記述することでコンパイルすることができるはずですが、これは正しくGSLをリンクしていないようですgsl_some_fun ction '" (GSLのデフォルトのインストールおよびリンクを使用しているとき、それは私のコンピュータ上で動作します。)

コンパイルまたはthis answer中にGSL出力によって提案された別の可能性は、LD_LIBRARY_PATH変数

LD_LIBRARY_PATH="/homefolder/iHARM/GSLcompiled/lib":$LD_LIBRARY_PATH 

を変更することである。しかし、これは同じになります結果。私はしかし

gcc -someoptions -Wl,-rpath -Wl,"/homefolder/iHARM/GSLcompiled/lib" ./some.o -o harm 

、これらの作業のどちらを使用するGSLによって提案されたもう一つの選択肢だった-Lと-Iオプション

cd iHARM 
gcc -someoptions -I../GSLcompiled/include/ -L../GSLcompiled/lib ./some.o -o harm 

を使用してリンクしようとすると、同様にそれはしていません。

GSLを正しくリンクするにはどうすればよいですか?

(私は非常にこれで経験しておりませんので、これはまた、構文またはそうではいくつかの本当に基本的な間違いかもしれません。)

+0

あなたの '--prefix'設定はあまりにも特殊すぎるでしょう。 https://stackoverflow.com/a/16363784/841108 –

答えて

1

実行最初configure --help。あなたは使用したい--enable-staticオプションを受け入れることがわかります。

お使いのノートパソコンにLinuxをインストールしてコンパイルすることができます(その場合は、クラスタにはほとんど静的にリンクされたバイナリがscp)。

すべての自動作成ソフトウェアに共通の--prefixをよく共有してください。 thisを参照してください。 documentation of autoconfを読んでください。あなたが常に--prefix=$HOME/soft(root権限を必要としない)を使用しているとしましょう。

あなたはmakeしてコンパイルすることができその後、物事はあなたが検査し、あなたの接頭辞に関連するディレクトリに適切後者のコピーでしょう/tmp/gslinstに入るインストールさそうmake install DESTDIR=/tmp/gslinstください。

libgsl.alibgslcblas.aの両方があります。私のDebianシステムでは、libgsl-devパッケージが提供しています(再構築する必要はありません)。

これらの静的ライブラリを使用します。あなたはそれらのためのフルパスを提供することができます。つまり、あなたのリンクで明示的に$HOME/soft/lib/libgsl.aを使用してgccコマンドをharmとしてください。

gcc some.o $HOME/soft/lib/libgsl.a -o harm 

しかしYMMVとリンクしてください。 gccへの議論の順序は大事です。

$LD_LIBRARY_PATHまたは-Wl,-rpathで静的リンクを使用する必要はありません。動的リンクが必要な場合は、rpathをお読みください。

pkg-configも参照してください。

+0

を参照してください。解決方法は実際にあなたがそれらを述べる方法でgccの議論を書くことでした! (また、はい、正しい順序で。) – Void

関連する問題