Lenguaje mixto enlazando estáticamente con gfortran y gcc
Tengo un código escrito en C y Fortran que quiero compilar en un ejecutable enlazado estáticamente. Si compilo el código dinámicamente (usando el-fno-underscoring
opción para gfortran), todo funciona bien. Sin embargo, quiero vincularlo a un archivo .so, vincular estáticamente la mayoría de las bibliotecas necesarias, y luego vincularlo dinámicamente alibkrb5
, muy parecido al método descrito enesta entrada de blog.
Seguí los pasos de la publicación del blog anterior y logré compilar la biblioteca .so sin ningún problema.nm
muestra que está en buena forma, con mis subrutinas Fortran y funciones C que se muestran:
[...]001020b9 T turnover
[...]000d31ea T initio
La primera función está escrita en Fortran y la segunda en C. No tienen guiones bajos ni nada, por lo que deberían vincularse. Mi programa principal (en Fortran) se compila como los otros archivos de origen de Fortran. Cuando intento enlazar, sin embargo, me sale un error:
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 devolvió 1 estado de salida
Enmain_program.o
, Puedo ver que hay
00000000 T MAIN__
Todo se ve en orden, entonces ¿por qué no está enlazando?