前提说明:

这里的命令默认在apue.3e解压文件夹目录下运行。


报告权限不够:

make[1]: 进入目录“/home/cxs/code/apue.3e/lib”
make[1]: execvp: ../systype.sh: 权限不够
Makefile:6: ../Make.defines.: 没有那个文件或目录
make[1]: *** 没有规则可制作目标“../Make.defines.”。 停止。
make[1]: 离开目录“/home/cxs/code/apue.3e/lib”
make: *** [Makefile:6:all] 错误 1

解决办法:chmod a+x systype.sh

./fixup.awk rot13a.c >xlate
/bin/sh: 1: ./fixup.awk: Permission denied
make[1]: *** [Makefile:18:rot13c2.c] 错误 126
make[1]: 离开目录“/home/cxs/code/apue.3e/advio”
make: *** [Makefile:6:all] 错误 1

解决办法:chmod a+x ./advio/fixup.awk


undefined reference to `major’

/usr/bin/ld: /tmp/ccmTGRc3.o: in function `main':
devrdev.c:(.text+0xc5): undefined reference to `minor'
/usr/bin/ld: devrdev.c:(.text+0xdb): undefined reference to `major'
/usr/bin/ld: devrdev.c:(.text+0x128): undefined reference to `minor'
/usr/bin/ld: devrdev.c:(.text+0x13e): undefined reference to `major'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:18:devrdev] 错误 1
make[1]: 离开目录“/home/cxs/code/apue.3e/filedir”
make: *** [Makefile:6:all] 错误 1

解决办法:添加#include <sys/types.h>


提示 error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_flag’; did you mean ‘_flags’?

gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  buf.c -o buf  -L../lib -lapue
buf.c: In function ‘is_linebuffered’:
buf.c:90:15: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?90 | #define _flag __pad[4]|               ^~~~~
buf.c:104:13: note: in expansion of macro ‘_flag’104 |  return(fp->_flag & _IOLBF);|             ^~~~~
buf.c:105:1: warning: control reaches end of non-void function [-Wreturn-type]105 | }| ^
make[1]: *** [Makefile:16:buf] 错误 1
make[1]: 离开目录“/home/cxs/code/apue.3e/stdio”
make: *** [Makefile:6:all] 错误 1
gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  buf.c -o buf  -L../lib -lapue
buf.c: In function ‘is_linebuffered’:
buf.c:99:13: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_flag’; did you mean ‘_flags’?99 |  return(fp->_flag & _IOLBF);|             ^~~~~|             _flags
buf.c:100:1: warning: control reaches end of non-void function [-Wreturn-type]100 | }| ^
make[1]: *** [Makefile:16:buf] 错误 1
make[1]: 离开目录“/home/cxs/code/apue.3e/stdio”
make: *** [Makefile:6:all] 错误 1

解决办法:将./stdio/buf.c文件的

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

删掉,同时将下面的flag全部换成flags:

int
is_unbuffered(FILE *fp)
{return(fp->_flags & _IONBF);
}int
is_linebuffered(FILE *fp)
{return(fp->_flag & _IOLBF);
}int
buffer_size(FILE *fp)
{#ifdef _LP64return(fp->_IO_buf_end - fp->_IO_buf_base);
#elsereturn(BUFSIZ);    /* just a guess */
#endif
}#else#error unknown stdio implementation!#endif

提示:/usr/bin/ld: 找不到 -lbsd

gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  badexit2.c -o badexit2  -L../lib -lapue -pthread -lrt -lbsd
/usr/bin/ld: 找不到 -lbsd
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:31:badexit2] 错误 1
make[1]: 离开目录“/home/cxs/code/apue.3e/threads”
make: *** [Makefile:6:all] 错误 1

解决办法:sudo apt-get install libbsd-dev, 安装所需要的文件库


参考链接:

[1] https://stackoverflow.com/questions/19671152/usr-bin-ld-cannot-find-lbsd
[2] https://stackoom.com/question/3m0WZ/在ubuntu-中使用apue-e中的-make时-如何修复-struct-FILE-没有名为-pad-的成员-错误

Ubuntu20.04 编译运行apue.3e 避坑指南相关推荐

  1. 【技术分享】戴尔工作站安装Win10+Ubuntu20.04双系统教程与避坑指南

    文章目录 引言 1.安装前的几个注意事项(避坑指南) 1.1.有多块硬盘,该如何分配给Win10和Ubuntu系统? 1.2.Ubuntu分区应该怎么分? 2.系统安装步骤 2.1.下载系统镜像 2. ...

  2. mac下编译android源码避坑指南(新)

    截至目前mac环境下android源码编译最新避坑指南 避坑方法 配置(不说配置的都是耍流氓) 下载 编译 烧录 注意事项 避坑方法 源码.SDK.机型版本一定要清楚,有些特殊的版本需要特殊的方法,官 ...

  3. Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南

    Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南 实验环境 下载Android源码树 在pixel3上安装手机驱动版本 编译Android源码 Android ...

  4. Ubuntu20.04编译并运行imu_utils,并且标定IMU

    Ubuntu20.04编译并运行imu_utils,并且标定IMU 一.编译并运行imu_utils 1 安装依赖项 2 下载imu_utils和code_utils 2.1 code_utils编译 ...

  5. Ununtu 18.04 安装Carla 0.9.13 以及Carla ros bridge 超级避坑指南(更新于2022.10.20)

    Carla0.9.13 以及Carla ros bridge 超级避坑指南 Carla0.9.13 以及Carla ros bridge 超级避坑指南 站在巨人肩膀前进 显卡驱动问题 首先就是虚幻4的 ...

  6. Ubuntu20.04编译Linux内核

    Ubuntu20.04编译Linux内核 下载Linux源码 生成.config文件 编译Linux内核 下载Linux源码 Linux源码可以从Linux内核官网进行下载,如下图所示,我下载的是5. ...

  7. HarmonyOS 开发避坑指南

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  8. 罗技无线网卡linux,Linux(Ubuntu)装罗技LMS避坑指南

    Linux(Ubuntu)装罗技LMS避坑指南 前言:搜索音质好的播放软件时发现MPD竟然可以直接命令行操作.连界面都是在终端里的.满满的极客范,心动.搞起!结果-搞了几个小时.各种折腾.就是读取不到 ...

  9. VMProtect SDK完全避坑指南

    文章目录 前言 编译VMProtect Demo 生成机器码 替换密钥对 生成序列号 总结 前言 在编写软件的时候,通常会有这样一个需求,需要对自己写的软件实现一机一码加密保护,并且最好能够限制使用时 ...

最新文章

  1. 《x86汇编语言:从实模式到保护模式》读书笔记之后记
  2. 【软考-软件设计师】总线结构
  3. SAP CRM Fiori应用My note的技术实现
  4. HTML DOM节点的属性获取
  5. corosync和pacemaker实现httpd和mysql双集群
  6. 学习笔记-AngularJs(四)
  7. linux下编译安装ACE-6.5.1
  8. 修改Jupyter Notebook默认工作目录
  9. CTSC2017 APIO2017 THUSC2017 游记
  10. loj 6083.「美团 CodeM 资格赛」数码
  11. poj 3735 Training little cats (矩阵快速幂)
  12. w ndoWs8pE模式下载,Windows pe下载_Windows pe免费版(Windows PE工具集合)8.2 - 系统之家...
  13. yolov3安卓实现_Android—yolov3目标检测移植
  14. HD AUDIO再2003安装的问题
  15. DM8达梦数据库:sql查询达梦数据库实例的详情
  16. 软考易错知识点(自用)
  17. (三)ArcGIS Server之发布要素服务
  18. Arduino驱动HDC1080测量温湿度
  19. guzzle php,PHP HTTP 客户端 - Guzzle
  20. 【C++---16】常指针和常引用

热门文章

  1. WORD2010自动编号后,目录那里编号和文字中间有很大的空格,怎么
  2. effective C++ 条款 5:了解c++默认编写并调用那些函数
  3. [安全攻防进阶篇] 七.恶意样本检测之编写代码自动提取IAT表、字符串及时间戳溯源
  4. 娜璋旅行(三)九月的甘肃新疆:人间之边,天堂之界
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1058:求一元二次方程
  6. 【机器视觉】 dev_update_time算子
  7. 【Qt】Qt下载教程
  8. 【Linux系统编程】进程间通信概述
  9. 【Linux】一步一步学Linux——alias命令(205)
  10. 【Linux】一步一步学Linux——Bash常用快捷键(11)