加载报告在函数“_start”中:(.text+0x20):对“main”的未定义引用

load reports In function `_start': (.text+0x20): undefined reference to `main'

我已阅读与错误消息相关的许多问题:

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: 在函数 _start': (.text+0x20): undefined reference tomain' 没有找到这个问题的答案。

我有:

Program InvertMultiply

implicit none
integer (kind=4),parameter :: nx=3
integer (kind=4) :: ipiv(nx)
integer (kind=4) :: info,i,j
real (kind=8) :: A(nx,nx), B(nx,nx), C(nx,nx), work(nx)
real (kind=8) :: alpha,beta

external DGEMM
external DGETRF
external DGETRI

A=reshape((/1,-1,-1,0,1,0,0,0,1/),(/3,3/));
B=A                           ! copy of A
call DGETRF(nx, nx, B, nx, ipiv, info)
call DGETRI(nx, B, nx, ipiv, work, nx, info)
alpha=1
beta=0
CALL DGEMM('N','N',nx,nx,nx,alpha,A,nx,B,nx,beta,C,nx)
print *,'A*Ainv'
do i=1,nx
  write(*,fmt="(6(1x,f4.1))")C(i,:)
end do
! should be diagonal
End Program InvertMultiply

用于确保 LAPACK 例程可用。 我可以编译 link 与:

gfortran  InvertMultiply.f90 -llapack -lblas

a.out产生并给出正确答案

但是,如果我将编译 link 分成 2 个步骤

gfortran -c InvertMultiply.f90

gfortran  -o InvertMultiply.o -llapack -lblas
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In     function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

谁能看出我做错了什么?

-o 指定输出名称,而不是对象...因此 -o InvertMultiply.o 指定输出为 InvertMultiply.o。只剩下图书馆,它们不包含 main

请另外指定一个输出文件(或完全省略 -o,在这种情况下,可执行文件很可能是 a.out):

gfortran -c InvertMultiply.f90
gfortran -o InvertMultiply InvertMultiply.o -llapack -lblas