#include "apue.h"
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc != 2)
err_quit("usage: ls directory_name");
if((dp=opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);
while((dirp = readdir(dp)) !=NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
我下载了apue.h文件,它作为我的源文件在当前目录中。当我尝试使用clang和OS进行编译时,出现以下错误。
1 warning generated.
Undefined symbols for architecture x86_64:
"_err_quit", referenced from:
_main in lsnew-cbcc3e.o
"_err_sys", referenced from:
_main in lsnew-cbcc3e.o
ld: symbol(s) not found for architecture x86_64
clang error: linker command failed with exit code 1 (use -v to see invocation)
谁能把我引向正确的方向,告诉我哪里出了问题?这段代码只能在32位系统上运行吗?
谢谢。
发布于 2017-05-24 15:54:00
我不熟悉您正在使用的示例,但是您看到的错误是一个链接器错误:这意味着,尽管头文件apue.h
声明了函数存在,但实际上并没有定义函数。
它们应该在另一个.c
文件中提供,也许是apue.c
?然后,您可以通过在clang命令行中将其与lsnew.c
一起列出,将其包含在编译后的程序中
clang -o lsnew apue.c lsnew.c
我不能告诉您在哪里可以找到所需的文件,但它可能与您找到apue.h
的位置相同。
发布于 2020-01-23 17:47:41
这两个未定义的符号都可以用自己的实现替换。
线条
if(argc != 2)
err_quit("usage: ls directory_name");
可以写成:
if(argc != 2) {
printf("usage: ls directory_name");
return 1;
}
线条
if((dp=opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);
可以写成:
if((dp=opendir(argv[1])) == NULL) {
printf("can't open %s", argv[1]);
return 1;
}
https://stackoverflow.com/questions/44152035
复制相似问题