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 <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("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参数指定你要链接的库名。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值