2

静的にリンクされた実行可能ファイルにコンパイルしたい C と Fortran で書かれたコードがあります。-fno-underscoring( gfortranのオプションを使用して) コードを動的にコンパイルすると、すべて正常に動作します。ただし、これを .so ファイルにリンクし、必要なライブラリのほとんどを静的にリンクしてから、このブログ投稿libkrb5で説明されている方法と非常によく似た方法で に動的にリンクしたいと考えています。

前回のブログ投稿の手順に従い、問題なく .so ライブラリをコンパイルできました。nmFortran サブルーチンと C 関数が表示されており、良好な状態であることを示しています。

[...]001020b9 T turnover
[...]000d31ea T initio

最初の関数は Fortran で、2 番目の関数は C で記述されています。これらにはアンダースコアなどがないため、リンクする必要があります。私のメイン プログラム (Fortran) は、他の Fortran ソース ファイルと同じようにコンパイルされています。ただし、リンクしようとすると、エラーが発生します。

gfortran  -m32  main_program.o -o program_static  -L./ -llibname -lkrb5 -lgssapi_krb5 -lsasl2 -lgfortran
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'

collect2: ld が 1 つの終了ステータスを返しました

ではmain_program.o

00000000 T MAIN__

すべてが順調に見えるのに、リンクしていないのはなぜですか?

4

1 に答える 1

3

OK、私が想像していたよりもずっと簡単だったようです! gfortran を使用してリンクする必要があり、その最終ステップで gfortran のリンクを無視します。

gfortran -static-libgfortran -m32  main_program.o -o program_static\
         -L./ -llibname -lkrb5 -lgssapi_krb5 -lsasl2

今はうまくいっているようです!

于 2009-08-20T15:18:09.170 に答える