libtool не компилирует Fortran в разделяемую библиотеку

Мне нужно использовать libtool для компиляции библиотеки Fortran, потому что мне нужна статическая и общая версия, но компиляция не будет работать так же, как библиотека C.

В случае библиотеки C:

$ cat hello.c 
#include <stdio.h>

int hello() {
  printf("Hello\n");
  return 0;
}
$ libtool --tag=CC --mode=compile gcc -c hello.c
libtool: compile:  gcc -c hello.c  -fPIC -DPIC -o .libs/hello.o
libtool: compile:  gcc -c hello.c -o hello.o >/dev/null 2>&1
$ nm .libs/hello.o              
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 T hello
                 U puts

Как вы можете видеть в приведенном выше примере, libtool добавил -fPIC, а объект имеет _GLOBAL_OFFSET_TABLE_.

В случае библиотеки Fortran:

$ cat hello.f 
        function hello ()
            write (*,*) "Hello"
        endfunction hello
$ libtool --tag=FC --mode=compile gfortran -c hello.f
libtool: compile:  gfortran -c hello.f  -o .libs/hello.o
libtool: compile:  gfortran -c hello.f >/dev/null 2>&1
$ nm .libs/hello.o 
                 U _gfortran_st_write
                 U _gfortran_st_write_done
                 U _gfortran_transfer_character_write
0000000000000000 T hello_

Как вы можете видеть в приведенном выше примере, libtool не добавляет -fPIC, а объект не имеет _GLOBAL_OFFSET_TABLE_.

Как я могу решить эту проблему?

Дополнительная информация

$ libtool --version
libtool (GNU libtool) 2.4.2
$ gcc --version
gcc (GCC) 4.8.2 20140206 (prerelease)
$ gfortran --version
GNU Fortran (GCC) 4.8.2 20140206 (prerelease)

person Raniere Silva    schedule 21.03.2014    source источник


Ответы (1)


Вы также можете просто использовать gcc

> libtool --tag=FC --mode=compile gcc -c hello.f90
libtool: compile:  gcc -c hello.f90  -fPIC -o .libs/hello.o
libtool: compile:  gcc -c hello.f90 -o hello.o >/dev/null 2>&1
> nm .libs/hello.o
                 U _gfortran_st_write
                 U _gfortran_st_write_done
                 U _gfortran_transfer_character_write
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 T hello_
person Vladimir F    schedule 21.03.2014