当我编译以下程序时,我收到以下错误
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;将每个字符串发送到第二个文件。添加到字符串的开头和结尾。
答案 0 :(得分:3)
错误消息显示您正在从fgetline()
调用函数main()
,但无法找到fgetline()
的定义。这可能是因为在编译main()时,您没有链接fgetline()
是其中一部分或未编译包含fgetline()
的目标文件的库。
您包含的标头仅包含声明,但生成最终可执行文件需要getline()
的定义。也许,你打算使用POSIX getline?
如果它是你自己的函数,那么你需要用它的定义进行编译。