У меня есть некоторый код, написанный на C и Fortran, который я хочу скомпилировать в статически связанный исполняемый файл. Если я скомпилирую код динамически (используя опцию -fno-underscoring
для gfortran), все будет работать нормально. Однако я хочу связать его в файл .so, статически связывая большинство необходимых библиотек, а затем динамически связать с libkrb5
, очень похоже на метод, описанный в этом сообщении в блоге .
Я выполнил действия, описанные в предыдущем сообщении в блоге, и мне удалось без проблем скомпилировать библиотеку .so. nm
показывает, что он в хорошей форме, с моими подпрограммами на языке Fortran и функциями C, которые отображаются:
[...]001020b9 T turnover
[...]000d31ea T initio
Первая функция написана на Фортране, а вторая на C. Они не имеют подчеркивания или чего-либо еще, поэтому они должны ссылаться. Моя основная программа (на Фортране) скомпилирована, как и другие исходные файлы на Фортране. Когда я пытаюсь установить связь, я получаю сообщение об ошибке:
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__
Все выглядит по порядку, так почему же оно не связывается?