當前位置:編程學習大全網 - 編程語言 - undefined reference to `err_quit' ; undefined reference to `err_sys’是啥錯誤?

undefined reference to `err_quit' ; undefined reference to `err_sys’是啥錯誤?

我跟妳遇到的是同樣的問題,妳這個滿意答案壹點都不具體,下面是我的解決辦法:

1、在編輯myls.c文件時加入#include“apueerror.h”

apueerror.h代碼如下(復制粘貼後改為.h後綴的文件)

#include "apue.h"

#include <errno.h> /* for definition of errno */

#include <stdarg.h> /* ISO C variable aruments */

static void err_doit(int, int, const char *, va_list);

/*

* Nonfatal error related to a system call.

* Print a message and return.

*/

void

err_ret(const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(1, errno, fmt, ap);

va_end(ap);

}

/*

* Fatal error related to a system call.

* Print a message and terminate.

*/

void

err_sys(const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(1, errno, fmt, ap);

va_end(ap);

exit(1);

}

/*

* Fatal error unrelated to a system call.

* Error code passed as explict parameter.

* Print a message and terminate.

*/

void

err_exit(int error, const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(1, error, fmt, ap);

va_end(ap);

exit(1);

}

/*

* Fatal error related to a system call.

* Print a message, dump core, and terminate.

*/

void

err_dump(const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(1, errno, fmt, ap);

va_end(ap);

abort(); /* dump core and terminate */

exit(1); /* shouldn't get here */

}

/*

* Nonfatal error unrelated to a system call.

* Print a message and return.

*/

void

err_msg(const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(0, 0, fmt, ap);

va_end(ap);

}

/*

* Fatal error unrelated to a system call.

* Print a message and terminate.

*/

void

err_quit(const char *fmt, ...)

{

va_list ap;

va_start(ap, fmt);

err_doit(0, 0, fmt, ap);

va_end(ap);

exit(1);

}

/*

* Print a message and return to caller.

* Caller specifies "errnoflag".

*/

static void

err_doit(int errnoflag, int error, const char *fmt, va_list ap)

{

char buf[MAXLINE];

vsnprintf(buf, MAXLINE, fmt, ap);

if (errnoflag)

snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",

strerror(error));

strcat(buf, "\n");

fflush(stdout); /* in case stdout and stderr are the same */

fputs(buf, stderr);

fflush(NULL); /* flushes all stdio output streams */

}

2、看到apueerror.h文件裏面包含了

#include <errno.h>

#include <stdarg.h>

這2個頭文件是吧

然後再把這2個頭文件添加到同壹個目錄下,具體代碼如下:

errno.h

#ifndef _I386_ERRNO_H 

#define _I386_ERRNO_H 

#define EPERM 1 /* Operation not permitted */ 

#define ENOENT 2 /* No such file or directory */ 

#define ESRCH 3 /* No such process */ 

#define EINTR 4 /* Interrupted system call */ 

#define EIO 5 /* I/O error */ 

#define ENXIO 6 /* No such device or address */ 

#define E2BIG 7 /* Arg list too long */ 

#define ENOEXEC 8 /* Exec format error */ 

#define EBADF 9 /* Bad file number */ 

#define ECHILD 10 /* No child processes */ 

#define EAGAIN 11 /* Try again */ 

#define ENOMEM 12 /* Out of memory */ 

#define EACCES 13 /* Permission denied */ 

#define EFAULT 14 /* Bad address */ 

#define ENOTBLK 15 /* Block device required */ 

#define EBUSY 16 /* Device or resource busy */ 

#define EEXIST 17 /* File exists */ 

#define EXDEV 18 /* Cross-device link */ 

#define ENODEV 19 /* No such device */ 

#define ENOTDIR 20 /* Not a directory */ 

#define EISDIR 21 /* Is a directory */ 

#define EINVAL 22 /* Invalid argument */ 

#define ENFILE 23 /* File table overflow */ 

#define EMFILE 24 /* Too many open files */ 

#define ENOTTY 25 /* Not a typewriter */ 

#define ETXTBSY 26 /* Text file busy */ 

#define EFBIG 27 /* File too large */ 

#define ENOSPC 28 /* No space left on device */ 

#define ESPIPE 29 /* Illegal seek */ 

#define EROFS 30 /* Read-only file system */ 

#define EMLINK 31 /* Too many links */ 

#define EPIPE 32 /* Broken pipe */ 

#define EDOM 33 /* Math argument out of domain of func */ 

#define ERANGE 34 /* Math result not representable */ 

#define EDEADLK 35 /* Resource deadlock would occur */ 

#define ENAMETOOLONG 36 /* File name too long */ 

#define ENOLCK 37 /* No record locks available */ 

#define ENOSYS 38 /* Function not implemented */ 

#define ENOTEMPTY 39 /* Directory not empty */ 

#define ELOOP 40 /* Too many symbolic links encountered */ 

#define EWOULDBLOCK EAGAIN /* Operation would block */ 

#define ENOMSG 42 /* No message of desired type */ 

#define EIDRM 43 /* Identifier removed */ 

#define ECHRNG 44 /* Channel number out of range */ 

#define EL2NSYNC 45 /* Level 2 not synchronized */ 

#define EL3HLT 46 /* Level 3 halted */ 

#define EL3RST 47 /* Level 3 reset */ 

#define ELNRNG 48 /* Link number out of range */ 

#define EUNATCH 49 /* Protocol driver not attached */ 

#define ENOCSI 50 /* No CSI structure available */ 

#define EL2HLT 51 /* Level 2 halted */ 

#define EBADE 52 /* Invalid exchange */ 

#define EBADR 53 /* Invalid request descriptor */ 

#define EXFULL 54 /* Exchange full */ 

#define ENOANO 55 /* No anode */ 

#define EBADRQC 56 /* Invalid request code */ 

#define EBADSLT 57 /* Invalid slot */ 

#define EDEADLOCK EDEADLK 

#define EBFONT 59 /* Bad font file format */ 

#define ENOSTR 60 /* Device not a stream */ 

#define ENODATA 61 /* No data available */ 

#define ETIME 62 /* Timer expired */ 

#define ENOSR 63 /* Out of streams resources */ 

#define ENONET 64 /* Machine is not on the network */ 

#define ENOPKG 65 /* Package not installed */ 

#define EREMOTE 66 /* Object is remote */ 

#define ENOLINK 67 /* Link has been severed */ 

#define EADV 68 /* Advertise error */ 

#define ESRMNT 69 /* Srmount error */ 

#define ECOMM 70 /* Communication error on send */ 

#define EPROTO 71 /* Protocol error */ 

#define EMULTIHOP 72 /* Multihop attempted */ 

#define EDOTDOT 73 /* RFS specific error */ 

#define EBADMSG 74 /* Not a data message */ 

#define EOVERFLOW 75 /* Value too large for defined data type */ 

#define ENOTUNIQ 76 /* Name not unique on network */ 

#define EBADFD 77 /* File descriptor in bad state */ 

#define EREMCHG 78 /* Remote address changed */ 

#define ELIBACC 79 /* Can not access a needed shared library */ 

#define ELIBBAD 80 /* Accessing a corrupted shared library */ 

#define ELIBSCN 81 /* .lib section in a.out corrupted */ 

#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ 

#define ELIBEXEC 83 /* Cannot exec a shared library directly */ 

#define EILSEQ 84 /* Illegal byte sequence */ 

#define ERESTART 85 /* Interrupted system call should be restarted */ 

#define ESTRPIPE 86 /* Streams pipe error */ 

#define EUSERS 87 /* Too many users */ 

#define ENOTSOCK 88 /* Socket operation on non-socket */ 

#define EDESTADDRREQ 89 /* Destination address required */ 

#define EMSGSIZE 90 /* Message too long */ 

#define EPROTOTYPE 91 /* Protocol wrong type for socket */ 

#define ENOPROTOOPT 92 /* Protocol not available */ 

#define EPROTONOSUPPORT 93 /* Protocol not supported */ 

#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ 

#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ 

#define EPFNOSUPPORT 96 /* Protocol family not supported */ 

#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ 

#define EADDRINUSE 98 /* Address already in use */ 

#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ 

#define ENETDOWN 100 /* Network is down */ 

#define ENETUNREACH 101 /* Network is unreachable */ 

#define ENETRESET 102 /* Network dropped connection because of reset */ 

#define ECONNABORTED 103 /* Software caused connection abort */ 

#define ECONNRESET 104 /* Connection reset by peer */ 

#define ENOBUFS 105 /* No buffer space available */ 

#define EISCONN 106 /* Transport endpoint is already connected */ 

#define ENOTCONN 107 /* Transport endpoint is not connected */ 

#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ 

#define ETOOMANYREFS 109 /* Too many references: cannot splice */ 

#define ETIMEDOUT 110 /* Connection timed out */ 

#define ECONNREFUSED 111 /* Connection refused */ 

#define EHOSTDOWN 112 /* Host is down */ 

#define EHOSTUNREACH 113 /* No route to host */ 

#define EALREADY 114 /* Operation already in progress */ 

#define EINPROGRESS 115 /* Operation now in progress */ 

#define ESTALE 116 /* Stale NFS file handle */ 

#define EUCLEAN 117 /* Structure needs cleaning */ 

#define ENOTNAM 118 /* Not a XENIX named type file */ 

#define ENAVAIL 119 /* No XENIX semaphores available */ 

#define EISNAM 120 /* Is a named type file */ 

#define EREMOTEIO 121 /* Remote I/O error */ 

#define EDQUOT 122 /* Quota exceeded */ 

#define ENOMEDIUM 123 /* No medium found */ 

#define EMEDIUMTYPE 124 /* Wrong medium type */ 

#end

stdarg.h

#ifndef _STDARG_H_

#define _STDARG_H_

#ifndef RC_INVOKED

#ifndef _VA_LIST_DEFINED

#define _VA_LIST_DEFINED

#endif

#ifndef _VA_LIST

#define _VA_LIST

typedef char* va_list;

#endif

#define __va_argsiz(t)

#ifdef __GNUC__

#define va_start(ap, pN)

#else

#define va_start(ap, pN)

#endif

#define va_end(ap) ((void)0)

#define va_arg(ap, t)

#endif

#endif

3、最後工作目錄裏有下面這幾個文件就完全沒有問題了!

myls.c

apue.h

apueerror.h

errno.h

stdarg.h

dirent.h

搞定收工(dirent.h文件應該有吧,沒有照上述方法自己做壹個或者網上載個都很方便)

  • 上一篇:Secu啟動器:GTA4運行時出現無法啟動應用程序。
  • 下一篇:家用哪種智能門鎖好?
  • copyright 2024編程學習大全網