Mieszany język statycznie łączący się z gfortranem i gcc
Mam kod napisany w C i Fortran, który chcę skompilować do statycznie połączonego pliku wykonywalnego. Jeśli kompiluję kod dynamicznie (używając-fno-underscoring
opcja dla gfortran), wszystko działa dobrze. Chcę jednak połączyć go z plikiem .so, statycznie łącząc większość potrzebnych bibliotek, a następnie połączyć dynamicznie zlibkrb5
, bardzo podobnie do metody opisanej wten wpis na blogu.
Wykonałem kroki z poprzedniego wpisu na blogu i udało mi się skompilować bibliotekę .so bez żadnych problemów.nm
pokazuje, że jest w dobrej kondycji, wyświetlając moje podprogramy Fortran i funkcje C:
[...]001020b9 T turnover
[...]000d31ea T initio
Pierwsza funkcja jest napisana w języku Fortran, a druga w C. Nie mają podkreślników ani niczego, więc powinny się łączyć. Mój główny program (w Fortran) jest kompilowany tak jak inne pliki źródłowe Fortrana. Gdy próbuję połączyć, pojawia się błąd:
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 zwrócił 1 status wyjścia
Wmain_program.o
, Widzę, że jest
00000000 T MAIN__
Wszystko wygląda w porządku, więc dlaczego nie łączy?