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

时间:2018-02-21 19:39:01

标签: fortran gfortran

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

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

我有:

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例程可用。 我可以编译和链接:

gfortran  InvertMultiply.f90 -llapack -lblas
生成

a.out并给出正确答案

但是,如果我将编译链接分解为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

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:2)

-o指定输出名称,而不指定对象...因此-o InvertMultiply.o指定输出为InvertMultiply.o。只保留了库,它们不包含main

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

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