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
浙公网安备 33010602011771号