编译第一个文件
2014-07-22 23:26
239 查看
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文件内容如下(相信并非最优的写法):
运行生成的可执行文件,得到如下输出:
那该怎么编译这个实例呢?需要做下面几件事情:
到书的主页去下载源代码,主页地址为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.3e CC=gcc CFLAGS=-Wall LIBAPUE=$(ROOT)/lib/libapue.a INCLUDE=$(ROOT)/include all: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
运行生成的可执行文件,得到如下输出:
相关文章推荐
- 第一个QT文件为毛编译不出来
- classpath的作用、简单批处理自定义编译、第一个jar文件包的生成
- 第一个Makefile文件(可以用来编译前面红黑树的实现程序和测试程序)
- mac 环境下 编译运行第一个java文件
- 详细贯穿Golang和Python的第一个程序,以及对应的二进制文件编译方法
- 编译第一个uefi文件
- CC2640/CC2650编译第一个工程文件错误的原因分析及解决方法(非常重要)
- 把aspx文件编译成DLL文件
- g++ 编译 c++ 程序时需要包括 include .h 文件,还是需要 .cpp 文件
- Jbuilder编译和创建执行文件
- Linux服务器内核编译基础--几个重要的RedHat Linux内核文件介绍
- NAntGUI 刚刚写了一个生成 NAnt .build 编译文件的小工具(三)
- 多文件编译链接时的错误
- NAntGUI 刚刚写了一个生成 NAnt .build 编译文件的小工具。刚刚写完了总体部分,先给大家看看界面(一)
- 总结:m文件转化为c/c++语言文件,VC编译
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 用NAnt编译带有资源文件(*.resx,*.bmp,*.gif等)的C#项目
- 编译自己的资源文件编辑器(reseditor.exe)
- 编译输出的PE文件的执行过程
- 把aspx文件编译成DLL文件