编译运行unix高级环境编程中的代码

1 篇文章 0 订阅

小白在学习unix环境高级编程中,想试试书中的代码,遇到点问题,记录下来。

APUE中有一个apue.h的头文件,是作者编写的头文件,想要运行书中的代码必须要用到这个头文件。头文件中声明和定义的方法的源代码在http://www.apuebook.com/src.tar.gz可下载。解压之后会生成一个apue.2e的目录,网上有很多在各种平台下如何编译的文章,按大家介绍的方法编译完成之后,一般都建议将apue.h及error.c放到/usr/include下,一来我经常用的帐号没有写/usr/include的权限,二来在有root权限的机器上试过,将error.c及libapue.a直接放到/usr/include并不管用,遂放弃。还有建议将apue.h及error.c直接放在代码所在的目录下,编译时加上.c文件就行,但是总感觉这样不行。难道我调用一个函数,都要去apue的源代码包中将包含函数定义的.c文件移到工作 目录下?编译的时候都得加上?既然编译apue.2e目录都没有问题,也不需要root权限,肯定有其它方法的,所以在apue.2e下建了一个目录作为放测试代码的目录尝试

开发环境是RH5.1。目录结构如下:

$/HOME/apue.2e

在apue.2e下新建了一个apueTest目录:$/HOME/apue.2e/apueTest


在$/HOME/apue.2e/apueTest下写了一段测试代码vfork.c,代码内容来自书中。

#include "apue.h"
int glob = 6;


int main(void)
{
        int var;
        pid_t pid;


        var= 88;
        printf("before vfork\n");
        if((pid = vfork()) < 0)
        {
                err_sys("vfork error");
        }
        else if(pid == 0)
        {
                glob++;
                var++;
                exit(0);
        }


        printf("pid=%d,glob=%d,var=%d\n",getpid(),glob,var);
        exit(0);
}



根据apue.2e其它子目录下的.mk文件,在此目录下创建Makefile文件

include ../Make.defines.linux
EXTRA=


PROGS = vfork


all: vfork


.PHONY: clean cleanvf
clean:
        $(RM) ${PROGS} ${TEMPFILES} *.o




然后make,编译成功

gcc -DLINUX -ansi -I/testuser/apue.2e/include -Wall -D_GNU_SOURCE   -L../lib  vfork.c  ../lib/libapue.a  -o vfork



但是我直接执行“gcc -DLINUX -ansi -I/testuser/apue.2e/include -Wall -D_GNU_SOURCE   -L../lib  vfork.c  ../lib/libapue.a  -o vfork”会报如下错误,这个不知道为嘛  - -

/tmp/cceNppD7.o: In function `main':
vfork.c:(.text+0x3f): undefined reference to `err_sys(char const*, ...)'
collect2: ld returned 1 exit status

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值