1

csparse、gsl、pthread、lapack、blas などのライブラリを使用するアプリケーションを静的にリンクする必要があります。最後の 2 つは libgfortran も必要です。だから私のコマンドは

gcc -o main bunch_of_object_files.o -fopenmp -static -lcsparse -lgsl -lgslcblas -lpthread -llapack -lblas -lm -lgfortran

そして出力は

/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0xa): undefined reference to `fedisableexcept'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0x56): undefined reference to `feenableexcept'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0x6e): undefined reference to `feenableexcept'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0x86): undefined reference to `feenableexcept'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0xb6): undefined reference to `feenableexcept'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgfortran.a(fpu.o): In function `_gfortrani_set_fpu':
(.text+0x4a): undefined reference to `feenableexcept'
collect2: ld returned 1 exit status

しかし、gcc の代わりに gfortran を使用してリンクすると機能します。なんで?

4

1 に答える 1

4

-lmの後に入れ-lgfortranます。静的リンクの場合、順序が重要です。

于 2012-05-07T14:41:34.097 に答える