UNIX网络编程 卷2 源代码使用
来源:互联网 发布:阿里智能 应用层数据 编辑:程序博客网 时间:2024/05/24 02:39
1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/
wget http://www.kohala.com/start/unpv22e/unpv22e.tar.gz -P /usr/local/src
2. 解压
tar xvf /usr/local/src/unpv22e.tar.gz -C /root/bin
3. 编译库文件
cd /root/bin/unpv22e/
./configure
编辑生成config.h文件,注释以下几行
vi config.h
56 // #define uint8_t unsigned char
57 // #define uint16_t unsigned short
58 // #define uint32_t unsigned int
添加MSG_R和MSG_W定义
vi config.h
66 // add by jcq
67 typedef unsigned long ulong_t;
68 #define MSG_R 0400
69 #define MSG_W 0200
添加_GNU_SOURCE定义
vi config.h
#define _GNU_SOURCE
修改warpunix.c中的MKtemp函数,使用mkstemp函数替换mktemp函数
cd lib
181 void
182 Mktemp(char *template)
183 {
184 if (mkstemp(template) == NULL || template[0] == 0)
185 err_quit("mktemp error");
186 }
编译生成libunpipc.a
cd lib
make
将生成的libunpipc.a复制到/usr/lib中。
[root@localhost myunp2]# vim ftok.c[root@localhost myunp2]# gcc -o ftok ftok.c /tmp/ccxRydhw.o: In function `main':ftok.c:(.text+0x18): undefined reference to `err_quit'ftok.c:(.text+0x30): undefined reference to `Stat'ftok.c:(.text+0x48): undefined reference to `Ftok'collect2: 错误:ld 返回 1[root@localhost myunp2]# gcc -o ftok ftok.c -lunpipc/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_open':wrapunix.c:(.text+0x4d8): undefined reference to `mq_open'wrapunix.c:(.text+0x4f0): undefined reference to `mq_open'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_close':wrapunix.c:(.text+0x52b): undefined reference to `mq_close'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_unlink':wrapunix.c:(.text+0x55b): undefined reference to `mq_unlink'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_send':wrapunix.c:(.text+0x5a3): undefined reference to `mq_send'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_receive':wrapunix.c:(.text+0x5e3): undefined reference to `mq_receive'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_notify':wrapunix.c:(.text+0x623): undefined reference to `mq_notify'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_getattr':wrapunix.c:(.text+0x653): undefined reference to `mq_getattr'/usr/lib/libunpipc.a(wrapunix.o): In function `Mq_setattr':wrapunix.c:(.text+0x68b): undefined reference to `mq_setattr'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_open':wrapunix.c:(.text+0x9c8): undefined reference to `sem_open'wrapunix.c:(.text+0x9e0): undefined reference to `sem_open'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_close':wrapunix.c:(.text+0xa1b): undefined reference to `sem_close'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_unlink':wrapunix.c:(.text+0xa4b): undefined reference to `sem_unlink'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_init':wrapunix.c:(.text+0xa8b): undefined reference to `sem_init'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_destroy':wrapunix.c:(.text+0xabb): undefined reference to `sem_destroy'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_wait':wrapunix.c:(.text+0xaeb): undefined reference to `sem_wait'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_trywait':wrapunix.c:(.text+0xb1c): undefined reference to `sem_trywait'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_post':wrapunix.c:(.text+0xb5b): undefined reference to `sem_post'/usr/lib/libunpipc.a(wrapunix.o): In function `Sem_getvalue':wrapunix.c:(.text+0xb93): undefined reference to `sem_getvalue'/usr/lib/libunpipc.a(wrapunix.o): In function `Shm_open':wrapunix.c:(.text+0xccc): undefined reference to `shm_open'/usr/lib/libunpipc.a(wrapunix.o): In function `Shm_unlink':wrapunix.c:(.text+0xd0b): undefined reference to `shm_unlink'collect2: 错误:ld 返回 1[root@localhost myunp2]# gcc -lrt -o ftok ftok.c -lunpipc[root@localhost myunp2]# man mq_openCannot open the message catalog "man" for locale "zh_CN.UTF-8"(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")Formatting page, please wait...
出现上面的错误,使用gcc 加选项-lrt解决。
错误:
[root@localhost myunp2]# gcc -lrt -o slot slot.c -lunpipcslot.c: 在函数‘main’中:slot.c:8:22: 错误:‘IPC_PRIVATE’未声明(在此函数内第一次使用) msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT); ^slot.c:8:22: 附注:每个未声明的标识符在其出现的函数内只报告一次In file included from slot.c:1:0:unpipc.h:153:21: 错误:‘MSG_R’未声明(在此函数内第一次使用) #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6) ^slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’ msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT); ^unpipc.h:153:29: 错误:‘MSG_W’未声明(在此函数内第一次使用) #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6) ^slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’ msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT); ^slot.c:8:45: 错误:‘IPC_CREAT’未声明(在此函数内第一次使用) msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT); ^slot.c:11:22: 错误:‘IPC_RMID’未声明(在此函数内第一次使用) Msgctl(msqid,IPC_RMID,NULL);
解决方法:
1.unpv22e里面的Make.defines
修改
#CFLAGS = -g -O2 -D_REENTRANT -Wall
CFLAGS = -g -O2 -D_GNU_SOURCE -D__USE_GNU -D_REENTRANT -Wall
2 将unpv22e中的unpipc.h拷贝到需要编译的代码的目录。
3 将config.h也拷贝到这个目录,由于unpipc.h依赖于这个头文件。
0 0
- UNIX网络编程 卷2 源代码使用
- UNIX网络编程 卷2 源代码使用
- UNIX网络编程 卷2 源代码使用
- UNIX网络编程 卷2 源代码使用
- Unix网络编程卷1源代码使用
- UNIX网络编程 卷2 源代码环境搭建
- Unix网络编程 卷2:进程间通信(linux环境下源代码使用)
- 《UNIX网络编程 卷2》 笔记: 使用FIFO实现信号量
- 网络编程第2卷源代码使用unpipc.h
- UNIX网络编程 UNP 卷2 第一章
- 《UNIX 网络编程 卷2》读书笔记
- UNIX网络编程:卷2-读书笔记
- 《UNIX网络编程 卷2》 笔记: 简介
- 《UNIX网络编程 卷2》 笔记: 管道
- 《UNIX网络编程 卷2》 笔记: FIFO
- Unix 网络编程卷1
- unix网络编程第一卷代码初使用【转】
- ubuntu16.04 UNIX 网络编程卷一 源码使用
- facebook-ads-java-api Marketing API 简介及使用
- Xcode代码格式化插件教程与配置
- rm - remove files or directories
- VC操作Word书签模板
- 数值运算与运算符
- UNIX网络编程 卷2 源代码使用
- SubLime Text快捷键及常用插件
- Web安全XSS
- iOS开发之SDCycleScrollView,好用的第三方无限轮播图
- 【模板】约瑟夫环
- Android Activity onCreate()方法重复执行
- BI进行中,重新设计改造质检数据管理系统(图文)
- Docker Compose—简化复杂应用的利器
- 315. Count of Smaller Numbers After Self