在学unix高级编程环境。之前在虚拟机上已经编译过一次了。这次就记录下编译中的问题吧。
源项目APUE。学习UNIX高级编程中一些接口并非系统自带。而是通过apue来使用的。
安装
安装其实非常简单,直接
git clone https://github.com/brandongooch/apue.3e.git
cd apue.3e
make
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
不过基本99%都是编译不过去的。因为apue使用的一些接口比较老了。导致编译不过。
我自己做了下修改,上传到自己的仓库了。使用方法和之前一样。
或着
git clone https://github.com/hangxin001/my_study_tools.git
cd my_study_tools/apue.3e
make
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
编译错误
这里我遇到过的一些问题,还有1个no member named的错误,因为时间原因实在想不起来怎么解决了,感兴趣的可以diff下两份源码。
undefined reference to `minor’
devrdev.c: 在函数‘main’中:
devrdev.c:19:25: 警告:隐式声明函数‘major’ [-Wimplicit-function-declaration]
19 | printf("dev = %d/%d", major(buf.st_dev), minor(buf.st_dev));
| ^~~~~
devrdev.c:19:45: 警告:隐式声明函数‘minor’ [-Wimplicit-function-declaration]
19 | printf("dev = %d/%d", major(buf.st_dev), minor(buf.st_dev));
| ^~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cc3nw7vB.o: in function `main':
devrdev.c:(.text+0xc1): undefined reference to `minor'
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: devrdev.c:(.text+0xd7): undefined reference to `major'
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: devrdev.c:(.text+0x124): undefined reference to `minor'
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: devrdev.c:(.text+0x13a): undefined reference to `major'
collect2: 错误:ld 返回 1
make[1]: *** [Makefile:18:devrdev] 错误 1
解决办法是加入头文件#include <sys/sysmacros.h>