Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序中未定义的引用错误_C_File_Function_Undefined Reference - Fatal编程技术网

C程序中未定义的引用错误

C程序中未定义的引用错误,c,file,function,undefined-reference,C,File,Function,Undefined Reference,我写了一个C程序pgm.C。它包含一个函数readfile.so。我还编写了一个头文件do.h。然后,我在一个单独的程序ini.c中编写了这个readfile函数,并将do.h包含在这个程序中。当我编译pgm.c时,我得到了错误pgm.c:.text+0x2e:readfile的未定义引用 我的代码是: do.h extern int readfile( FILE *in ); pgm.c #include<stdio.h> #include"do.h"

我写了一个C程序pgm.C。它包含一个函数readfile.so。我还编写了一个头文件do.h。然后,我在一个单独的程序ini.c中编写了这个readfile函数,并将do.h包含在这个程序中。当我编译pgm.c时,我得到了错误pgm.c:.text+0x2e:readfile的未定义引用

我的代码是:

do.h
    extern int readfile( FILE *in );

pgm.c
    #include<stdio.h>
    #include"do.h"
    int main(int argc,char **argv)
    {
     FILE *in;
     in=fopen(argv[1],"r");
     readfile(in);
    }

ini.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
    #include <math.h>
    #include <float.h> 
    #include"do.h"
    int c;
    int readfile( FILE *in )
    {
    while( c == '#' || c == '\n' )  
    {
      if( c == '#' ) 
       {
        while( ( c = getc(in) ) != '\n' );
       }
      if( c == '\n' ) 
       c = getc( in ); 
     }
      if( c == EOF )
      break;
      else
      {
      printf("hai");
      }
    }
    return 1;
    }
我的程序有错误吗? 由gcc pgm.c编译

c区分大小写

extern int readfile( FILE *in );
不声明与相同的函数

int readFile( FILE *in )
选择一个外壳,在任何地方使用它来实现相同的功能。

C区分大小写

extern int readfile( FILE *in );
不声明与相同的函数

int readFile( FILE *in )

选择一个外壳并在任何地方使用它来实现相同的功能。

您还需要检查fopen的返回值


如果返回NULL,则函数readfile(取决于大小写)将崩溃

,您还需要检查fopen的返回值


如果返回NULL,则函数readfile(取决于大小写)将崩溃

无需声明函数extern,它们是extern by default用于编译和链接的命令行在哪里?添加完整的行,因为它看起来不使用ini编译和链接。不需要声明函数extern的可能重复项,它们是默认的extern。用于编译和链接的命令行在哪里?添加完整的行,因为看起来您没有编译并链接ini.cpi的可能重复项。在中更改int readfile FILE*in;在do.h.中,但再次得到了相同的eroorIt实现定义,即链接是否区分大小写。您是否阅读了问题下方的评论?你的问题不仅仅在于code@user39133尝试在@user39133中将int readFile FILE*更改为int readFile*,您还需要使用gcc pgm.c ini.ci进行编译。尝试..在中更改int readFile*;在do.h.中,但再次得到了相同的eroorIt实现定义,即链接是否区分大小写。您是否阅读了问题下方的评论?你的问题不仅仅在于code@user39133尝试将中的int readFile FILE*更改为@user39133中的int readFile*您还需要使用gcc pgm.c ini.c进行编译