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中的库相关推荐

  1. UNIX网络编程unp.h配置

    UNIX网络编程unp.h配置 前言 额外拓展可忽略 正题 前言 本人使用的系统版本是ubuntu-16.04.6,64位. 关于源码的下载可以到www.unpbook.com上下载, 我打开该网站打 ...

  2. Unix网络编程之-------unp.h头文件详细配置-1

    unix网络编程unp.h最详细全面配置说明 今天开始学习Unix网络编程这本大神之作了,由于之前在学习另外一本杰作Unix环境高级编程,遇到过第一个程序编译报错的情况,知道这是大神自己写的头文件在我 ...

  3. UNIX网络编程之旅-配置unp.h头文件环境

    最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include "unp.h"  相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程 ...

  4. 16.unix网络编程一卷 unp.h

    unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...

  5. Unix——《Unix网络编程》配置unp.h头文件

    <Unix网络编程 卷1>unp.h 头文件及其编译问题 本书源码下载地址 http://www.unpbook.com 解压tar -zxvf unpv13e.tar.gz 其实各个编译 ...

  6. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  7. linux下网络编程设置非阻塞,UNIX网络编程 非阻塞connect的实现

    一.<UNIX网络编程>-非阻塞connect 在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未 ...

  8. linux unix编程思想,Unix网络编程思想

    本次博客主要总结参考<Unix网络编程>卷一前四章的知识,对TCP一对一通信进行重新改造和分析,经典就是经典,无可替代! 一.为什么使用包裹函数 任何现实世界的程序都必须检查每个函数调用是 ...

  9. unix网络编程 的环境配置

    <unix网络编程> 的环境配置 首先在网上下载UNP的库文件,然后就可以安装学了.我的系统环境: 2.6.32-131.0.15.el6.i686 #1 SMP Sat Nov 12 1 ...

最新文章

  1. 把Doc文档转换成HTML等其它格式
  2. [可行]setoolkit生成木马软件远程控制实例
  3. 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
  4. dojo Quick Start/dojo入门手册--package机制
  5. boost::hana::remove_range_c用法的测试程序
  6. 程序员面试100题之十:快速寻找满足条件的两个数
  7. en55032最新标准下载_大型设备塔吊安装维保、安全检查及案例,94页PPT下载!
  8. 黑马Android全套视频无加密完整版
  9. sd卡测速工具_拍完照回家发现SD卡损坏,拯救你的照片就用这个办法!
  10. Android-多击事件处理
  11. 从ASCII到UTF-8——字符集到底是什么?
  12. 6.5. Properties
  13. 书信用语“商祺”是的意思
  14. 华为服务器设备型号查询,查看服务器机器型号
  15. db2 系统临时表空间
  16. 计算机应用基础系统总线,2019年自学考试计算机应用基础试题(4)
  17. E3亮点:StudioMDHR的《茶杯头》
  18. 测试经验 --- 那些躲在角落的缺陷
  19. 留学生交流互动论坛网站
  20. CPU有桌面版和服务器版,知识普及:服务器CPU和普通CPU有何不同

热门文章

  1. 梯形图语言开发的软件可以申请软件著作权登记么?
  2. CycleGAN实现斑马变马 结构主体代码分析(附加内容待完成)
  3. ksql函数 转载的秦亚伟的
  4. win10安装SqlServer2014
  5. linux安装binutils
  6. 用DAB格式快速制作易读宝BNL点读包
  7. 数据库SQL:数据更新
  8. (阿里云笔记)轻量应用服务器控制台界面的使用
  9. python生成一笔画_用Python玩烧脑小游戏《一笔画完》,瞬间闯到100关
  10. JavaScript WebGL 基础概念