博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apue 2ed 和 unp 3ed 环境配置
阅读量:5040 次
发布时间:2019-06-12

本文共 2220 字,大约阅读时间需要 7 分钟。

网上虽然有很多配置攻略,但是依然会一头雾水,下面记录我的配置过程。

 

OS. Ubuntu 10.04 LTS 5 

 

首先下载APUE源代码(http://www.apuebook.com/src.tar.gz)和UNP源代码(http://www.unpbook.com/unpv13e.tar.gz)

 

先进行配置APUE环境:

1. 使用tar -zxvf命令解压src.tar.gz文件,我的解压位置为/home/yachen/Downloads/apue.2e

 

2. 修改Make.defines.linux文件,将WKDIR=/home/xxx/download/apue.2e改为你的解压目录

 

3. 打开std/linux.mk,将里面的2个nawk改为awk

 

4. 在include/apue.h中添加一行:

#define ARG_MAX 4096

分别打开threadtl/getenv1.c 和threadctl/getenv3.c,首部添加一行:

#include "apue.h"

打开threads/badexit2.c   修改第31行,将 pthread_self() 的返回值转换为 int 类型。

即将该行修改为 printf("thread 2: ID is %d\n", (int)pthread_self());

 

5.在apue.2e根目录下执行make

 

6.编译通过,复制include/apue.h到/usr/include下,lib/libapue.a 到/usr/lib/和 /usr/lib64(32位linux不需复制到第二个目录)下。

 

配置工作结束,编译文件时记得链接-lapue即可。

 

7. 测试成果,假设/tmp下有一个文件:threadid.c,内容如下(apue线程章节的例子):

#include <apue.h>
#include <pthread.h>
pthread_t ntid;
void
printids(const char *s) 
{
        pid_t           pid;
        pthread_t       tid;
        pid = getpid();
        tid = pthread_self();
        printf("%s pid %u tid %u (0x%x)\n", s, (unsigned int)pid,
          (unsigned int)tid, (unsigned int)tid);
}
void *
thr_fn(void *arg)
{
        printids("new thread: ");
        return((void *)0);
}
int
main(void)
{
        int             err;
        err = pthread_create(&ntid, NULL, thr_fn, NULL);
        if (err != 0)
                err_quit("can't create thread: %s\n", strerror(err));
        printids("main thread:");
        sleep(1);
        exit(0);
}
使用如下命令编译:
gcc threadid.c -o threadid -lapue -lpthread  
可以运行一下:
yachen@ubuntu:/tmp$ ./threadid 
new thread:  pid 17490 tid 816015696 (0x30a36950)
main thread: pid 17490 tid 823949040 (0x311c76f0)

 

 

 

下面是UNP环境的配置:

1.使用tar -zxvf命令解压unpv13e.tar.gz文件,我的解压位置为/home/yachen/Downloads/unpv13e

 

2.打开unpv13e目录,执行./configure

 

3.由于将unp.h放入/usr/include会可能遇到很多问题,我们新建一个代码目录,比如我建立在/home/yachen/Documents/unpcode文件夹,将unpv13e的config.h和lib文件夹下的unp.h放入unpcode文件夹,打开拷贝来的unp.h,将#include "../config.h"改为#include "config.h"并添加一行#define MAX_LINE 2048。

以后建立unp相关工程直接在此文件夹下建立工程目录,并在main.c中加入#include "../unp.h"即可。

 

4.重新进入unpv13e目录,进入lib目录,执行make命令,会在unpv13e目录下生成libunp.a,将该文件拷贝入/usr/lib和/usr/lib64(32位系统同APUE)

 

配置工作结束,编译文件时记得链接-lunp即可。

 

5. 测试成果

以如下main.c为例

#include "../unp.h"

 

int main() {

  err_sys("wtf");

}

yachen@ubuntu:~/Documents/unp/intro$ gcc main.c -o main -lunp

yachen@ubuntu:~/Documents/unp/intro$ ./main
wtf: Success

 

转载于:https://www.cnblogs.com/yachen/p/4470058.html

你可能感兴趣的文章
【linux】重置fedora root密码
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>