Я пытаюсь скомпилировать некоторый код на фортране, и я сталкиваюсь с некоторыми запутанными ошибками компоновки. У меня есть код, который я компилирую и помещаю в статическую библиотеку:
>gfortran -c -I../../inc -o bdout.o bdout.F
>ar rv libgeo.a bdout.o
Затем я пытаюсь скомпилировать эту библиотеку с помощью простого тестового кода и получить следующее:
>gfortran -o mytest -L -lgeo mytest.F
/tmp/cc4uvcsj.o: In function `MAIN__':
mytest.F:(.text+0xb0): undefined reference to `ncwrite1_'
collect2: ld returned 1 exit status
Это не в именовании объектов, потому что все выглядит хорошо:
>nm -u libgeo.a
bdout.o:
U _gfortran_exit_i4
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_character
U _gfortran_transfer_integer
U ncobjcl_
U ncobjwrp_
U ncopencr_
U ncopenshcr_
U ncopenwr_
U ncwrite1_
U ncwrite2_
U ncwrite3_
U ncwrite4_
U ncwritev_
Я тоже могу проверить исходный объектный файл:
>nm -u bdout.o
U _gfortran_exit_i4
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_character
U _gfortran_transfer_integer
U ncobjcl_
U ncobjwrp_
U ncopencr_
U ncopenshcr_
U ncopenwr_
U ncwrite1_
U ncwrite2_
U ncwrite3_
U ncwrite4_
U ncwritev_
Тестовый код просто содержит один вызов функции, определенной в bdout.o:
program hello
print *,"Hello World!"
call ncwrite1( istat, f, ix2, ix3, ix4, ix5, ih )
end program hello
Я не могу понять, в чем проблема. У кого-нибудь есть предложения? Может быть, даже просто способ отследить проблему?
Приветствие.