collect2:错误:ld返回1退出状态,gcc

时间:2016-07-23 08:21:05

标签: c gcc

当我编译以下程序时,我收到以下错误

debian:~/uni/Ass0$ gcc fgetline.c -Wall -o enquote
/tmp/ccFnIr1N.o: In function `main':
fgetline.c:(.text+0xfe): undefined reference to `fgetline'
collect2: error: ld returned 1 exit status

经过一些阅读后,我发现这个错误是由拼写错误或缺少库造成的。我不确定哪个库可能丢失。

标题文件" fgetline.h"

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>


int fgetline(FILE *fp,  char *line, int max);
FILE *fp,*fpc;
#define max 30
char line[max+1];

fgetline.c

#include "fgetline.h"

int main(int argc, char* argv[])
    {
            if (argc !=3)
            {
                    printf( "usage: enquote filetocopy filetowrite \n"      );
                    exit(1);
            }



            fp = fopen (argv [1], "r");
            if ( !fp)
                    {
                            printf("Couldn't open copy file: (%d) %s\n", errno, strerror(errno));
                            return -1;
                    }

            fpc = fopen (argv [2], "r+");

             if ( !fpc)
                    {
                            printf("Couldn't open write file: (%d) %s\n", errno, strerror(errno));
                            return -1;
                    }


while(1)
{
  /* read string from first file*/
  int length = fgetline(fp, line, 30 );
  /* if fail to read, break from loop*/
  if (length == -1)
    {

      break;
    }
    printf("\"%s\"\n",line); /*add "" around all strings read to new file*/
}
    fclose (fp);
    fclose (fpc);
    return 0;
}

正如我所说的,不是我所知道的拼写错误,也不是我读过的其他错误的lib,我使用gcc编译fgetline.c -Wall -o enquote 如果这有帮助的话。如果您看到其他错误,请随意指出它们,程序是两个从命令行获取两个参数,循环遍历第一个文件,并使用&#34;将每个字符串发送到第二个文件。添加到字符串的开头和结尾。

1 个答案:

答案 0 :(得分:3)

错误消息显示您正在从fgetline()调用函数main(),但无法找到fgetline()的定义。这可能是因为在编译main()时,您没有链接fgetline()是其中一部分或未编译包含fgetline()的目标文件的库。

您包含的标头仅包含声明,但生成最终可执行文件需要getline()定义。也许,你打算使用POSIX getline?

如果它是你自己的函数,那么你需要用它的定义进行编译。