首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >unix中的高级编程示例ls(1)命令错误

unix中的高级编程示例ls(1)命令错误
EN

Stack Overflow用户
提问于 2017-05-24 15:43:03
回答 2查看 304关注 0票数 3
代码语言:javascript
运行
复制
#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进行编译时,出现以下错误。

代码语言:javascript
运行
复制
    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位系统上运行吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-05-24 15:54:00

我不熟悉您正在使用的示例,但是您看到的错误是一个链接器错误:这意味着,尽管头文件apue.h声明了函数存在,但实际上并没有定义函数。

它们应该在另一个.c文件中提供,也许是apue.c?然后,您可以通过在clang命令行中将其与lsnew.c一起列出,将其包含在编译后的程序中

代码语言:javascript
运行
复制
clang -o lsnew apue.c lsnew.c

我不能告诉您在哪里可以找到所需的文件,但它可能与您找到apue.h的位置相同。

票数 1
EN

Stack Overflow用户

发布于 2020-01-23 17:47:41

这两个未定义的符号都可以用自己的实现替换。

线条

代码语言:javascript
运行
复制
if(argc != 2)
    err_quit("usage: ls directory_name");

可以写成:

代码语言:javascript
运行
复制
if(argc != 2) {
    printf("usage: ls directory_name");
    return 1;
}

线条

代码语言:javascript
运行
复制
if((dp=opendir(argv[1])) == NULL)
    err_sys("can't open %s", argv[1]);

可以写成:

代码语言:javascript
运行
复制
if((dp=opendir(argv[1])) == NULL) {
    printf("can't open %s", argv[1]);
    return 1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44152035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档