编译第一个文件
来源:互联网 发布:脸型与眉毛软件 编辑:程序博客网 时间:2024/05/16 13:43
APUE中有很多实例,比如第4页中图1-3中描述了一个简单的类似ls命令的c程序。几乎所有例子都会引用一个apue.h头文件。这个头文件是作者自己实现的,起到屏蔽平台相关实现的作用。直接编译图1-3中的程序是没法通过的,因为缺少apue.h这个头文件。
那该怎么编译这个实例呢?需要做下面几件事情:
- 到书的主页去下载源代码,主页地址为http://www.apuebook.com/。我看的书是第三版,所以下载到的压缩包名称是src.3e.tar.gz,解压后得到apue.3e文件夹。
- 编译源代码。只需要在apue.3e目录下运行make就可以完成编译。不过我编译是遇到缺少-lbsd的错误,需要运行sudo apt-get install libbsd-dev来安装libbsd-dev,然后编译就能正常结束了。编译完成后,在apue.3e/lib下会产生libapue.a,这个是书中实例所需要的lib文件。
- 把apue.3e转移到合适的位置,比如/usr/local/lib,这只是个人习惯。
- 编译书中的实例,例如gcc myls.c /usr/local/lib/apue.3e/lib/libapue.a -I /usr/local/lib/apue.3e/include,应该就能正常编译了。
意识到也该是时候学习Makefile的写法了,于是参考http://stackoverflow.com/questions/73799/how-did-you-learn-the-gnu-make-tools写了一个Makefile,这样只需要执行make就能完成编译了。Makefile文件内容如下(相信并非最优的写法):
#变量定义,变量的引用以$(variable)的形式ROOT=/usr/local/lib/apue.3eCC=gccCFLAGS=-WallLIBAPUE=$(ROOT)/lib/libapue.aINCLUDE=$(ROOT)/includeall:myls.o $(CC) myls.o $(LIBAPUE) -o myls#-c表示只编译不链接,如果不加会报错,因为err_quit和err_sys需要到对于的lib文件里找myls.o:myls.c $(CC) -c myls.c -I $(INCLUDE)clean: rm -rf *.o myls *.out
运行生成的可执行文件,得到如下输出:
0 0
- 编译第一个文件
- 编译第一个uefi文件
- 第一个linux编译
- 第一个QT文件为毛编译不出来
- 第一个LED驱动 , (一) . 编译步骤 , 文件目录
- mac 环境下 编译运行第一个java文件
- 第一个Makefile文件
- 第一个Makefile文件
- 第一个shell文件
- 第一个.so文件
- 第一个bootstrap文件
- 编译第一个驱动程序笔记
- 内核编译第一个错误
- 第一个Makefile文件(可以用来编译前面红黑树的实现程序和测试程序)
- classpath的作用、简单批处理自定义编译、第一个jar文件包的生成
- 第一个java读写文件
- 创建第一个HTML文件
- 创建第一个HTML文件
- mysql安装图解
- Java经典23种设计模式之行为型模式(四)
- 名字的漂亮度
- ORA-00845: MEMORY_TARGET not supported on this system 失败的解决方案
- 回望毕业季到现在
- 编译第一个文件
- 串口通信
- bzoj1671 [Usaco2005 Dec]Knights of Ni 骑士
- 浅谈C/C++堆栈指引——C/C++堆栈很强大(看到的很详细的文章,值得一看)
- 扩展欧几里得算法及其应用
- 半年杂记
- mysql总结
- 【搜索-DFS】Red and Black
- Linux常用命令