用gfortran编译和链接静态库

时间:2018-07-13 17:56:29

标签: gcc fortran gfortran static-linking

我想将一些常用的Fortran代码编译到一个静态库中(假设我将同时访问var frame = new DispatcherFrame(); var t = Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(1.5)); frame.Continue = false; }); Dispatcher.PushFrame(frame); t.Wait(); *.mod文件)。 这工作了。 但是,我在链接时遇到了问题。

这里是一个例子。假设我有*.a个文件:

mylib.f90

哪个编译为

MODULE MYLIB

  IMPLICIT NONE

CONTAINS

  INTEGER FUNCTION FOO(N)
    INTEGER, INTENT(IN) :: N
    FOO = N + 2
  END FUNCTION FOO

END MODULE MYLIB

现在,我有一个使用gfortran -c mylib.f90 ar rcs libmylib.a mylib.o 函数的程序:

FOO

为简单起见,我将其与PROGRAM MYPROG USE MYLIB IMPLICIT NONE INTEGER M M = FOO(3) WRITE (*,*) M END PROGRAM MYPROG mylib.mod放在同一目录中。编译:

libmylib.a

没有问题。链接,但是会导致错误:

gfortran -c myprog.f90

但是,gfortran -L./ -lmylib myprog.o myprog.o: In function `MAIN__': myprog.f90:(.text+0x11): undefined reference to `__mylib_MOD_foo' collect2: error: ld returned 1 exit status 中有符号__mylib_MOD_foo

libmylib.a

,如果我给它nm libmylib.a mylib.o: 0000000000000000 T __mylib_MOD_foo ,它可以毫无问题地编译。我在做什么错了?

PS。我见过某处,但现在找不到链接的方式如下:

mylib.o

有效。但是它应该用弱符号解决问题,而gfortran -Wl,--whole-archive libmylib.a -Wl,--no-whole-archive myprog.o 的输出不会将nm标记为弱。

0 个答案:

没有答案