Я пытаюсь скомпилировать код fortran, и я сталкиваюсь с некоторыми запутанными ошибками связывания. У меня есть некоторый код, который я скомпилировать и поместить в статическую библиотеку:Неопределенные ссылки
>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
Я не могу понять, в чем проблема. У кого-нибудь есть предложения? Может быть, даже просто способ отследить проблему?
Cheers.
Да, я просто попытался добавить команду компоновщика последним, но проблема не исчезла. -L. означает -L в. (Текущий каталог. – Brandon
Я имел в виду, что в вашем вопросе у вас есть пустой -L, без "." – janneb
Ах, извините, этого не заметили. Это было потеряно при вводе вопроса. Очевидно, это тоже не проблема. – Brandon