ライブラリにコンパイルされた、Fortran と C のソース ファイルが混在するコード (私のものではない) をコンパイルしようとしています。このライブラリは、直接リンクすることも、(より便利に) Python クラスから駆動することもできます。以前、g77 と gcc を使用してコードを 32 ビットとして正常にビルドしましたが、コードが大きなメモリ チャンクを使用し、64 ビットにする必要がある状況に遭遇しました。
gfortran 4.2.3 (AT&T R プロジェクトのバイナリ dist) とシステム gcc (4.2) を使用して、64 ビットのみ、またはユニバーサル バイナリとしてビルドしようとしました。ソース ファイルは正しくビルドされますが、ライブラリにリンクしようとすると、多くの Fortran 関数で「未定義のシンボル」エラーが多数発生します。ライブラリの nm は、シンボルが存在するように見えることを示していますが、明らかにリンカはそれらを見つけていません。
コンパイル コマンドのうちの 2 つ (多数のうち) を次に示します (エラーは発生しません)。
/usr/local/bin/gfortran -arch ppc -arch i386 -arch x86_64 -fPIC -fno-strength-reduce -fno-common -ff2c -Wall -c lsame.f
gcc -c -I/Users/keriksen/Research/atomic_data/fac -I/Users/keriksen/Research/atomic_data/fac/faclib -O2 -fPIC -fno-strength-reduce -fno-common pmalloc.c
そして、爆撃するリンクステップ:
gcc -o sfac sfac.c stoken.c -I/Users/keriksen/Research/atomic_data/fac -I/Users/keriksen/Research/atomic_data/fac/faclib -O2 -fPIC -fno-strength-reduce -fno-common -L/Users/keriksen/Research/atomic_data/fac -lfac -lm -lgfortran -lgcc
サンプルの未定義シンボル:
"_acofz1", referenced from:
_HydrogenicDipole in libfac.a(coulomb.o)
_HydrogenicDipole in libfac.a(coulomb.o)
およびそのシンボルが存在することを示す対応する nm:
niobe:atomic_data/fac[14] nm libfac.a | grep acof
0000000000000000 T _acofz1_
0000000000002548 S _acofz1_.eh
U _acofz1
リンカーに必要なスイッチを含めないなど、何か愚かなことをしていますか、それとももっと微妙なことがここで起こっていますか?