Unix环境高级编程源代码apue.3e在CentOS8中配置问题

1. 权限问题

make[1]: execvp: ../systype.sh: Permission denied
/bin/sh: ./fixup.awk: Permission denied

  解决方法:为systype.sh和fixup.awk文件添加执行权限:chmod +x 文件名

2. devrdev.c中未定义引用问题

devrdev.c:(.text+0xa5):对‘minor’未定义的引用
devrdev.c:(.text+0xbb):对‘major’未定义的引用
devrdev.c:(.text+0x106):对‘minor’未定义的引用
devrdev.c:(.text+0x11c):对‘major’未定义的引用

  解决方法:安装libbsd和libbsd-devel

yum install libbsd
yum install libbsd-devel

3. buf.c文件报错

buf.c: 在函数‘is_unbuffered’中:
buf.c:90:15: 错误:‘FILE’ {或称 ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?
 #define _flag __pad[4]
               ^~~~~
buf.c:98:13: 附注:in expansion of macro ‘_flag’
  return(fp->_flag & _IONBF);
             ^~~~~
buf.c: 在函数‘is_linebuffered’中:
buf.c:90:15: 错误:‘FILE’ {或称 ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?
 #define _flag __pad[4]
               ^~~~~
buf.c:104:13: 附注:in expansion of macro ‘_flag’
  return(fp->_flag & _IOLBF);
             ^~~~~
buf.c: 在函数‘buffer_size’中:
buf.c:92:15: 错误:‘FILE’ {或称 ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?
 #define _base __pad[2]
               ^~~~~
buf.c:111:13: 附注:in expansion of macro ‘_base’
  return(fp->_base - fp->_ptr);
             ^~~~~
buf.c:91:14: 错误:‘FILE’ {或称 ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?
 #define _ptr __pad[1]
              ^~~~~
buf.c:111:25: 附注:in expansion of macro ‘_ptr’
  return(fp->_base - fp->_ptr);
                         ^~~~

 解决方法: 打开apue.3e/stdio/buf.c文件

注释掉以下内容

#ifdef _LP64
#define _flag __pad[4]
#define _ptr __pad[1]
#define _base __pad[2]
#endif

 修改以下内容

int
is_unbuffered(FILE *fp)
{
	return(fp->_flags & _IONBF);
}

int
is_linebuffered(FILE *fp)
{
	return(fp->_flags & _IOLBF);
}

int
buffer_size(FILE *fp)
{
#ifdef _LP64
	return(fp->_IO_buf_end - fp->_IO_buf_base);
#else
	return(BUFSIZ);	/* just a guess */
#endif
}

 参考文章:https://blog.csdn.net/cxs5534/article/details/109324451

posted on 2021-03-14 17:12  旭、  阅读(540)  评论(0)    收藏  举报

导航