apue 2ed 和 unp 3ed 环境配置
网上虽然有很多配置攻略,但是依然会一头雾水,下面记录我的配置过程。
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
apue 2ed 和 unp 3ed 环境配置的更多相关文章
- 配置apue的头文件apue.h和unp的头文件anp.h
配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...
- UNP环境配置
最近在学习<UNIX网络编程>,书上将常用的头文件都放在unp.h里,需要自己编译一下代码搭建环境. UNP环境配置过程 下载源码 http://www.unpbook.com/src.h ...
- UNIX环境高级编程-环境配置
环境配置步骤如下. 1. 下载源文件:http://www.apuebook.com/src.tar.gz. 2. 复制src.tar.gz文件到/home/me/mydir/unixl/目录(自 ...
- Ubuntu开发环境配置
主要是: 源的更新 安装vim编辑器 远程登录xrdp相关配置 synergy symless键鼠共享配置 对新买的硬盘进行格式化和分区 vsftp环境搭建 gcc开发环境配置 qt5开发环境配置 m ...
- uboot环境配置
uboot环境配置 通过配置uboot让它在启动过程中从tftp获取内核和设备树,并从在加载内核之后把通过启动参数将"从nfs挂载根文件系统"传入内核.这个配置主要是通过uboot ...
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- Electron的环境配置
原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...
- Python开发环境配置
好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...
- PHP_环境配置_python脚本_2017
Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...
随机推荐
- nodejs request-promise 请求返回中文乱码
nodejs request-promise 请求返回中文乱码 解决方法: 具体步骤如下: 1. 引用iconv-lite 进行转码. 2. 请求时要写参数:encoding:null 3. 对bod ...
- mac配置jenkins遇到的问题及解决办法
写这篇博客的时候,我暂时放弃了mac配置jenkins,先记着遇到的坑吧.虽然无数次想砸电脑,但是回头想想,对于经常用windows系统和接触过linux的测试的我来说,这也是个熟悉mac系统的机会. ...
- SPOJ104 HIGH - Highways
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- ng-options 如何实现其中一项option禁选
<select class="form-control" ng-model="functionPaymentMethod" ng-options=&quo ...
- MVVM架构简单使用
版权声明:本文为博主原创文章,未经博主授权不得转载. 项目github地址 https://github.com/zhangjiahuan8888/mvvmDemo/tree/master 开篇 MV ...
- cJSON序列化工具解读一(结构剖析)
cJSON简介 JSON基本信息 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.易于人阅读和编写.同时易于机器解析和生成.是一种很好地数据交换语言. 官方 ...
- 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系
重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...
- 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理
重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...
- Linux系统 SSHD服务安全优化方案
# 1. 修改默认端口 #Port 22 # 2. 修改监听协议,只监听某个或某些网络协议 #AddressFamily any AddressFamily inet # 3. 修改ssh只监听内 ...
- 1-11 RHLE7-重定向和文件查找
在Linux 系统中,一切皆设备Linux系统中使用文件来描述各种硬件,设备资源等例如:以前学过的硬盘和分区,光盘等设备文件sda1 sr0============================ ...