混合语言静态与gfortran和gcc链接(Mixed language statically li

2019-08-01 18:40发布

我已经写在C和Fortran一些代码,我想编译成静态链接的可执行文件。 如果我动态编译代码(使用-fno-underscoring了gfortran选项),这一切工作正常。 但是,我想将其链接到一个.so文件,静态链接最需要的库中,然后动态链接到libkrb5 ,非常像描述的方法这个博客帖子 。

我跟着前面的博客文章的步骤,我设法编译.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__

一切看起来都在秩序,那么,为什么不链接?

Answer 1:

OK,看来,它是faaar比我设想的简单! 你只需要使用gfortran链接,而忽略在最后一步链接gfortran:

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

似乎现在的工作!



文章来源: Mixed language statically linking with gfortran and gcc