混合语言与gfortran和gcc静态链接

时间:2009-08-19 21:50:09

标签: static linker fortran mixed-mode gfortran

我有一些用C和Fortran编写的代码,我想编译成静态链接的可执行文件。如果我动态编译代码(使用gfortran的-fno-underscoring选项),一切正常。但是,我想将它链接到.so文件,静态链接大多数所需的库,然后动态链接到libkrb5,非常类似于this blog post中描述的方法。

我按照上一篇博客文章中的步骤操作,我设法编译.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__

一切看起来都是有序的,为什么它没有链接?

1 个答案:

答案 0 :(得分:3)

好吧,它看起来比我想象的更简单!你只需要使用gfortran进行链接,并在最后一步中忽略链接gfortran:

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

似乎现在正在工作!