расширенное программирование в Примере unix ошибка команды ls(1)

расширенное программирование в Примере unix ошибка команды ls(1)

24.05.2017 10:43:02 Просмотров 32 Источник
#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 X возникает следующая ошибка.

    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-битных системах?

спасибо.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/44152035/advanced-programming-in-the-unix-example-ls1-command-error#comment75321303_44152035
Я скачал apue.х... разве ему не нужна настоящая библиотека, связанная с ним?

Ответы - расширенное программирование в Примере unix ошибка команды ls(1) / advanced programming in the unix example ls(1) command error

Harun

24.05.2017 10:54:00

Я не знаком с примерами, которые вы используете, но ошибка, которую вы видите, является ошибкой компоновщика: это означает, что, хотя заголовочный файл apue.hобъявил, что функции существуют, на самом деле ничто не определило функции.

Они должны быть предусмотрены в другом .cфайл c, возможно apue.c? Затем вы включили бы его в свою скомпилированную программу, указав его в командной строке clang вместе с вашим lsnew.c:

clang -o lsnew apue.c lsnew.c

Я не могу сказать вам, где вы можете найти нужный файл, но он, вероятно, должен быть в том же месте, где вы нашли apue.h

https://stackoverflow.com/questions/44152035/advanced-programming-in-the-unix-example-ls1-command-error/44152272#comment75322123_44152272
Возможно, эти функции уже скомпилированы в статическую или динамическую библиотеку, и вам придется установить с ними связь.
https://stackoverflow.com/questions/44152035/advanced-programming-in-the-unix-example-ls1-command-error/44152272#comment75402168_44152272
@SHG я отправил письмо автору,и мне сказали использовать файл make. Он сказал, что нет .c исходный файл. Я пытаюсь научиться всему этому. Я вошел в каталог с файлом, который говорит make, и набрал make на терминале. Много чего произошло, но я не знаю, что теперь делать. Не знаю, правильно ли я это сделал.
Mykola

23.01.2020 12: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;
}
Закрыть X