Unix网络编程unp.h问题以及Linux中的库
Stevens的《UNIX网络编程 卷1:套接字连网API》是一本很著名的UNIX网络编程书籍。其中使用了一个unp.h的引用,如果没有设置相应的库的话,即使引入了头文件也是没用的。所以首先要配置相应的库。
基础环境:
操作系统 Debian
开发环境 GCC,MAKE等,首先要有c编译器,make等基础的工具。如果没有的话,可以通过下面命令安装。这个命令会安装一个工具集,其中包含了很多linux C开发所需的工具。
sudo apt-get install build-essential
(1)从网上下载unpv.13e.tar.gz。在网上一搜一大堆。unpv.12e.tar.gz版本的有问题,所以要避免使用。下载了安装包解压后就可以照着他的README文件指示安装了。解压的命令是
tar -xvf unpv.13e.tar.gz
(2)现在可以cd到unpv13e目录。执行下面两个命令就可以在unpv13e目录下生成相应的库函数。
cd unpv13e
./configure
cd lib && make
(3)返回unpv13e目录,将生成的libunp.a复制到相应的库文件目录下。相应的shell命令。
cd ..
sudo cp libunp.a /usr/lib
sudo cp libunp.a /usr/lib64
(4)修改unp.h并将其和config.h拷贝到/usr/iinclude中
gedit lib/unp.h //将unp.h中#include "../config.h"修改为#include "config.h"sudo cp lib/unp.h /usr/include
sudo cp config.h /usr/include
(5)编写一个小程序测试一下吧,在unpv13e的intro目录中包含了几个实例。可以用来测试一下。看能否生成相应的可执行文件。
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
附录:Linux中的库
库是作为软件的一个组建存在的,其目的是提高软件的可重用性。库里面封装了数据和函数。库可以分为静态库和动态库两种。在Linux系统中,通常把库文件放在/usr/lib或/lib目录中。Linux库文件名由前缀lib、库名以及后缀组成,其中动态库的后缀为.so,而静态库的后缀为.a。
在程序中使用静态库和动态库时,他们载入的顺序是不一样的。静态库的代码在编译是就拷贝到应用程序中,因此当多个应用程序同时引用一个静态库函数时,内存会有调用函数的多个副本。,这样的优点是可以节约编译是的时间。而动态库是在程序开始运行后调用库函数是才被载入的,被调函数在内存中只有一个副本,并且动态库是可以在程序运行期间释放动态库所占内存的。
(1)静态库的创建和使用
创建静态库的步骤如下:
1)在一个头文件中声明静态库所导出的函数。
2)在一个源文件中实现静态库函数所导出的函数。
3)编译源文件,生成可执行代码。
4)将可执行代码所在的目标文件加入到某个静态库中,并在静态库拷贝到系统默认的存放库文件的目录下。
编译并添加静态库
gcc -o mylib.o -c mylib.c
ar rcs libmylib.a mylib.o
ar命令可以创建和修改静态库。具体参见:man ar
(2)动态库的创建和使用
上面的配置过程创建的就是一个动态库。在编译包含动态库的函数是可以使用“-lunp”(包含上面所编译的库文件)选项。程序将调用动态链接库libunp.so中的函数。在-lunp中,-l为选项,unp为库名。unp是“libunp.so”的中间部分,linux中所以的库都以lib开始,在编译程序时无需带上前缀和后缀。
编译并添加动态库
gcc -fPIC -o mylib.o -c mylib.c
gcc -shared -o libmylib.so mylib.o
或
gcc -fPIC -shared -o libmylib.so mylib.c
参考:unix网络环境搭配
UNIX网络编程之旅-配置unp.h头文件环境[ 转]
LInux C 实战编程
Unix网络编程unp.h问题以及Linux中的库相关推荐
- UNIX网络编程unp.h配置
UNIX网络编程unp.h配置 前言 额外拓展可忽略 正题 前言 本人使用的系统版本是ubuntu-16.04.6,64位. 关于源码的下载可以到www.unpbook.com上下载, 我打开该网站打 ...
- Unix网络编程之-------unp.h头文件详细配置-1
unix网络编程unp.h最详细全面配置说明 今天开始学习Unix网络编程这本大神之作了,由于之前在学习另外一本杰作Unix环境高级编程,遇到过第一个程序编译报错的情况,知道这是大神自己写的头文件在我 ...
- UNIX网络编程之旅-配置unp.h头文件环境
最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include "unp.h" 相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程 ...
- 16.unix网络编程一卷 unp.h
unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...
- Unix——《Unix网络编程》配置unp.h头文件
<Unix网络编程 卷1>unp.h 头文件及其编译问题 本书源码下载地址 http://www.unpbook.com 解压tar -zxvf unpv13e.tar.gz 其实各个编译 ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
- linux下网络编程设置非阻塞,UNIX网络编程 非阻塞connect的实现
一.<UNIX网络编程>-非阻塞connect 在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未 ...
- linux unix编程思想,Unix网络编程思想
本次博客主要总结参考<Unix网络编程>卷一前四章的知识,对TCP一对一通信进行重新改造和分析,经典就是经典,无可替代! 一.为什么使用包裹函数 任何现实世界的程序都必须检查每个函数调用是 ...
- unix网络编程 的环境配置
<unix网络编程> 的环境配置 首先在网上下载UNP的库文件,然后就可以安装学了.我的系统环境: 2.6.32-131.0.15.el6.i686 #1 SMP Sat Nov 12 1 ...
最新文章
- 把Doc文档转换成HTML等其它格式
- [可行]setoolkit生成木马软件远程控制实例
- 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
- dojo Quick Start/dojo入门手册--package机制
- boost::hana::remove_range_c用法的测试程序
- 程序员面试100题之十:快速寻找满足条件的两个数
- en55032最新标准下载_大型设备塔吊安装维保、安全检查及案例,94页PPT下载!
- 黑马Android全套视频无加密完整版
- sd卡测速工具_拍完照回家发现SD卡损坏,拯救你的照片就用这个办法!
- Android-多击事件处理
- 从ASCII到UTF-8——字符集到底是什么?
- 6.5. Properties
- 书信用语“商祺”是的意思
- 华为服务器设备型号查询,查看服务器机器型号
- db2 系统临时表空间
- 计算机应用基础系统总线,2019年自学考试计算机应用基础试题(4)
- E3亮点:StudioMDHR的《茶杯头》
- 测试经验 --- 那些躲在角落的缺陷
- 留学生交流互动论坛网站
- CPU有桌面版和服务器版,知识普及:服务器CPU和普通CPU有何不同