我需要使用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)
答案 0 :(得分:3)
您也可以使用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_