2
我有一些用C和Fortran編寫的代碼,我想編譯成一個靜態鏈接的可執行文件。如果我動態編譯代碼(使用gfortran的-fno-underscoring
選項),它一切正常。但是,我想將它鏈接到.so文件,靜態鏈接大部分所需的庫,然後動態鏈接到libkrb5
,非常類似於this blog post中所述的方法。與gfortran和gcc靜態鏈接的混合語言
我按照之前的博客文章中的步驟操作,我設法編譯.so庫沒有任何問題。 nm
表明,它是在良好的狀態,與我的Fortran子程序和C函數顯示出來:
[...]001020b9 T turnover
[...]000d31ea T initio
第一個功能是寫在Fortran和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__
一切看起來都爲了,那麼爲什麼它不鏈接?