`
weihe6666
  • 浏览: 436186 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

APUE2源代码编译和单个源文件的编译(转载)

 
阅读更多
因为对linux感兴趣,所以一直在学习与之相关的东西。最近下载了APUE2,想学习一下。但是在运行作者随书
的源代码时,总是出错。最后几经周折,也在网上查了好多网友写的资料。终于有了点眉目,和大家分享一下!希望对后来者有帮助
首先,我下载的源码是APUE2的,也就是第二版的源码。至于和第一版到底有多少区别,我也不太清楚
在网上查找资料的时候,某些网友文章中的文件都对不上,可能就是版本的原因
如果你的源码中有类似这样的文件
[root@oracle apue]# ls
advio         environ    lib.svr4        Make.def.svr4  printer  Sourcefiles
call          file       lock            mycat          proc     stdio
calld         ipc        Make.def.44     open           pty      streams
datafiles     lib.44     Make.defines    opend          README   termios
db.lock.fine  lib.rhlin  Make.def.rhlin  opend.fe       sess     test
DISCLAIMER    lib.sun    Make.def.sun    open.fe        signals
则这是第一版的,其中这个Make.defines是我从Make.def.svr4 更改文件名后的。
我这里的文件(APUE2)类似于这样:(去掉了fig开头的一些源文件)
[root@oracle apue.2e]# ls |grep -v 'fig*'
advio
call
calld
daemons
db
DISCLAIMER
environ
exercises
include
ipc
ipp
lib
lock
mycat
open
opend
opend.fe
open.fe
proc
pty
README
sess
signals
sockets
std
stdio
streams
systype.sh
termios
threadctl
threads
[root@oracle apue.2e]#
确定了版本,其实编译起来也很容易!首先我们看看README文件,然后再注意几个关键点就可以了!
README文件:
To build the source, edit the Make.defines.* file for your system and set
WKDIR to the pathname of the tree containing the source code.  Then just
run "make".
一、(编译源文件)
1、我第一步先检查我os的版本!其实我们自己应该也知道了,例行步骤检查一下吧((*^__^*) 嘻嘻……)
   systype.sh 的文件就是这个作用
  首先看看当前用户有没有执行权限(为了减少麻烦最好是用root用户)
  [root@oracle apue.2e]# ls -l systype.sh
   -rwx------    1 root     root          227 Apr  8 17:16 systype.sh
  [root@oracle apue.2e]#
  如果没有执行权限,则
   chmod u+x systype.sh
  [root@oracle apue.2e]# ./systype.sh
   linux
  [root@oracle apue.2e]#

  执行后就会显示你目前使用的是什么系统,我用的RHEL as 3,所以显示为linux
2、以我的系统为例,确定了系统为linux后
   我此时修改Make.defines.linux文件,主要是修改WKDIR。
   我的文件是放在/home/apue.2e 目录下,所以我的WKDIR=/home/apue.2e
   你也只需要根据自己的情况修改。
   其他的默认就可以了!
3、在/home/apue.2e 目录下,执行make
   此时可能出现几个错误:
   1.nawk command cannot be found
   这个原因是你的系统还不支持nawk(new awk)这个命令
   解决:[root@oracle apue.2e]# alias nawk=awk
   给awk起一个别名,要系统能够认识nawk这个命令。
   2、在编译时可能也会出现其他的错误,但是对库文件的生成并不会有什么影响(有知道原因的可以交流一下)
   命令执行之后,在lib/下会产生libapue.a这个库文件。这说明库文件生成已经成功了!
4、这时你会发现,在apue.2e目录下的目录中,都生成了某些*.o的目标文件,
(三)如何编译单独的源文件
通过make命令是直接将所有的源程序编译成可执行文件的。如果需要编译和调试单个程序的话,方法如下:
1.首先还是要用make对所有文件进行编译。成功编译后,会在WKDIR/lib/下生成库文件libapue.a,主要是将apue.h(位于WKDIR/include/)中定义的所有内容生成一个静态的库,这样可以方便调用。
2.我们以WKDIR/下的fig1.3(实现ls部分功能)文件为例说明需要修改的地方。将fig1.3文件重命名为fig1.3.c,然后编辑该文件,将包含头文件的一行代码:
#i nclude "apue.h"  //默认所引用头文件的位置为当前的路径WKDIR=/home/apue.2e
修改为
#i nclude "include/apue.h"
即头文件apue.h的位置为当前路径下inlucde文件夹中,这个就正确的指定了apue.h的位置。
这样就可以进行编译了,但在编译的时候还要加上库文件libapue.a,因为该文件实现了apue.h中的所有功能,主要有常用头文件,宏定义以及自定义函数的实现。
输入命令
#gcc fig1.3.c lib/libapue.a  
则会生成可执行文件a.out。执行命令
#./a.out /home
则列出我的/home路径下的所有文件和文件夹:
.
..
david
simsun .ttc
simkai.ttf
simsun.ttf
MYKERNEL
当然,如果需要编译的是各个文件夹中的一个源程序时,则只需对所包含的头文件apue.h的路径作相对修改,改为
#i nclude "../include/apue.h"
以及编译是库文件的位置也相应修改,改为:
#gcc sourcefile.c ../lib/libapue.a
    至此,APUE第二版作者提供的源码编译方法和单独源码的编译都已经实现。
分享到:
评论

相关推荐

    apue.2e(apue源代码)

    APUE.2E是该书的第二版,提供了丰富的源代码实例,对于学习和理解UNIX系统编程的开发者来说,是一份极其宝贵的学习资料。 一、UNIX系统编程基础 UNIX系统编程涉及的核心概念包括进程管理、文件I/O、信号处理、网络...

    apue.2e源代码

    《APUE.2e》是...通过深入研究《APUE.2e》的源代码,不仅可以掌握UNIX环境下的编程技术,还能培养良好的编程习惯和问题解决能力,这对于任何想要在UNIX或类UNIX系统上进行开发的程序员来说都是一笔宝贵的财富。

    Unix环境高级编程(apue)源代码

    通过这些源代码,你可以深入了解如何在实际操作中应用Unix系统调用和库函数,这对于提高编程技能和解决问题的能力大有裨益。 以下是这个源代码集合中可能包含的一些关键知识点: 1. **进程管理**:包括进程创建...

    APUE3+代码+APUE2(中文)

    APUE3则是在APUE2的基础上进行了更新和扩展,针对现代UNIX系统(包括Linux)的变化,增加了新的章节和内容,如对POSIX标准的详细讨论,以及更多关于多进程和多线程编程的实践案例。APUE3还涵盖了进程间通信(IPC)、...

    apue.2e:ubuntu下可以编译通过的apue源代码

    这个名为"apue.2e:ubuntu下可以编译通过的apue源代码"的资源,提供了书中的源代码,特别强调了在Ubuntu操作系统下能够成功编译的版本,这为读者提供了一个实践和学习的绝佳平台。 在Linux和UNIX系统中,掌握编程...

    APUE(Unix环境高级编程源代码)相关源代码

    APUE的源代码是学习和理解书中理论知识的重要实践材料,它提供了丰富的示例程序,帮助读者将理论与实际编程相结合。 在阅读和分析这些源代码时,我们可以深入探讨以下几个关键知识点: 1. **系统调用**:APUE源...

    Unix环境高级编程第三版源代码编译.docx

    《Unix环境高级编程》第三版源代码编译文档主要涵盖了在Unix系统中如何编译和安装该书配套的源代码,以及源代码中的一些关键错误处理函数的实现。以下是相关知识点的详细说明: 1. **源代码编译与安装**: 在Unix...

    apue例子源码 已编译好

    在你提供的压缩包"apue.2e"中,包含了已编译好的源码,这意味着你可以直接在你的系统上运行这些程序,无需自己编译。将解压后的文件放在"/opt"目录下是一个常见的做法,因为这个目录通常用于存放全局可选的应用程序...

    只使用APUE的libapue.a库文件和apue.h头文件的例程,有Makefile

    2. `APUE源代码的编译过程.doc`:可能是关于如何从源码编译APUE库的文档,提供了详细步骤。 3. `example`:可能是一个示例目录,包含了更多的示例程序或相关资源。 4. `tags`:这是一个Vim编辑器的标签文件,用于...

    UNIX环境高级编程第二版源代码apue

    UNIX环境高级编程第二版源代码 apue second edition source code

    apue源代码

    "apue.2e"是该书的第二版源代码,包含了书中所有示例程序,这些源代码可以帮助读者更好地理解书中的概念和实践技巧。源代码的分析和学习将有助于提升对UNIX系统编程的理解和应用能力。 源代码中可能包含以下关键...

    APUE 源代码*修正所有序号和扩展名*.rar

    这本书的源代码是学习和理解UNIX系统编程的宝贵资源,对于想要深入研究UNIX内核机制、系统调用、多线程编程、进程间通信等高级主题的开发者来说尤其有价值。 在这个修正过的源代码压缩包中,作者或贡献者已经对原先...

    Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程

    在Mac OS X 10.8中编译APUE(Unix环境高级编程)的源代码是许多学习Unix系统编程的开发者可能需要进行的步骤。APUE,全称《Advanced Programming in the UNIX Environment》,是一本经典的教材,涵盖了Unix系统编程...

    apue头文件

    1. **下载源码**:你可以从互联网上找到APUE的源代码包,其中包括了`apue.h`和其他相关源文件。下载后将`apue.h`放入你的项目目录,或者将其放在系统头文件路径下,如`/usr/local/include`,这样编译器就能找到它。 ...

    unix环境高级编程源代码和apue.h文件

    压缩包中提供的源代码是书中的实例程序,它们涵盖了文件操作、进程控制、网络通信等多个方面,而apue.h文件则包含了这些程序中使用的通用定义和函数原型,方便读者复用和学习。 首先,我们来看Unix环境编程的基础...

    Unix环境高级编程英文第二版及源代码apue2

    源代码"apue2"是与书配套的实践示例代码,读者可以通过这些代码更好地理解和学习书中的概念。这些代码示例涵盖了各种Unix编程技术,比如创建进程、读写文件、使用管道和套接字通信、实现简单的服务器程序等,有助于...

    apue 代码

    2. **进程管理**:包括进程创建(`fork()`、`vfork()`、`clone()`)、进程终止(`exit()`、`_exit()`)、进程间通信(管道、消息队列、共享内存、信号量)和进程状态等。 3. **文件系统和I/O**:涵盖了标准I/O...

    APUE第三版源码

    UNIX环境高级编程第三版源码,Linux编程经典。。。。。。

    apue.2e.zip

    apue.2e.zip是一个包含该书源代码和相关示例的压缩包,是学习和实践UNIX系统编程的重要资源。 在APUE中,你可以学到的知识点包括但不限于: 1. **进程管理**:涵盖进程创建(fork、vfork、exec家族)、进程控制...

    Ubuntu12.04下编译成功的APUE附带源码

    在Ubuntu 12.04这个稳定且广泛应用的操作系统版本上编译APUE的源码,为开发者提供了一个理想的实践平台,特别是对那些想要学习Linux C编程的初学者和进阶者。 首先,我们需要理解Ubuntu 12.04(代号Precise ...

Global site tag (gtag.js) - Google Analytics