Linux安装apue.3e以及运行第一个例子报错undefined reference to 'err_quit'

安装apue.3e

  1. 下载编译要用到的源代码,Advanced Programming in the UNIX® Environment, Third Edition source code。
  2. 随便解压到哪个目录里,tar -zxv -f src.3e.tar.gz -C /your/direct/,会在/your/direct/目录下生成一个新目录apue.3e,然后cd到这个apue.3e里(若解压时报错不能创建目录,应该是你这个目录在一些关键位置导致,请用sudo
  3. 执行make,若编译过程中报错can't find -lbsd,请安装sudo apt-get install libbsd-dev,再make。假设你make成功后。
  4. cp ./include/apue.h /usr/include/,让程序可以include。
  5. cp ./lib/libapue.a /usr/local/lib/,让编译需要动态链接时,可以找到链接库。至此,环境变量配置完毕。(库文件叫libapue.a,去掉前缀后缀,这个库名字实际是apue)

系统:Ubuntu 16.04 LTS (amd64)

1-3 myls.c例子

#include "apue.h"
#include 

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("cant open %s", argv[1]);

  while ((dirp = readdir(dp)) != NULL)
    printf("%s\n",dirp->d_name);

  closedir(dp);
  exit(0);
}

在你写好程序的目录中执行CC myls.c或者gcc myls.c报错undefined reference to err_quit。因为你没有为编译指定要链接到的库文件,而gcc找不到实体。
执行gcc myls.c -o myls -l apue即可解决问题。-l参数指定你要链接的库名。

你可能感兴趣的:(Linux)