Unix网络编程第三版源码编译
2014-12-01 16:16
369 查看
本文用的Unix网络编程源码是第三版,不同版本的源码可能会有不同的错误,还有不同的操作系统也会有不同的错误,本文基于fedora 20 64位操作系统,不过一般都不是满大的问题,多改两下就好了。
配置:
cd Unix-Network-Programming/
./configure
//若无法执行,可以用chmod更改权限
主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版本是否匹配、编译器、库文件、头文件以及结构体定义等等)
编译库:
编译所有例程都需要用到的基础库
cd lib
make
得到静态库文件:libudp.a
继续编译基本库
$ cd ../libfree/
$ make
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o in_cksum.o in_cksum.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype
size_t size;
^
In file included from inet_ntop.c:27:0:
/usr/include/arpa/inet.h:64:20: error: prototype declaration
extern const char *inet_ntop (int __af, const void *__restrict __cp,
^
make: *** [inet_ntop.o] Error 1
出现错误!仔细查看发是在 inet_ntop方法中的参数size的类型,与声明在 /usr/include/arpa/inet.h中的inet_ntop()中的size参数类型不一致导致
使用 vim /usr/include/arpa/inet.h 命令查看inet_ntop函数的声明,发现其size的类型为socklen_t,所以将原size类型改为socklen_t就可以了,然后还要修改inet_ntop4()和inet_ntop()6函数的参数类型,然后就大功告成。
再次编译
$ make
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_pton.o inet_pton.c
ar rv ../libunp.a in_cksum.o inet_ntop.o inet_pton.o
a - in_cksum.o
a - inet_ntop.o
a - inet_pton.o
ranlib ../libunp.a
貌似这次编译的内容并到了libunp.a中,没有生成新的库文件。
$ cd ../libgai
$ make
ar rv ../libunp.a
ranlib ../libunp.a
拷贝生成的库文件到系统库目录
$ cd ..
$ sudo cp libunp.a /usr/lib
$ sudo cp libunp.a /usr/lib32
将unp.h中 #include "../config.h" 修改为#include "config.h",并将其和config.h拷贝到/usr/include中,
然后编译源代码
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
跟普通的编译不一样的是要在最后加上刚才那个链接库,-l参数加上刚才那个libunp.a去掉lib和后面的.a。最后得到参数-lunp。
配置:
cd Unix-Network-Programming/
./configure
//若无法执行,可以用chmod更改权限
主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版本是否匹配、编译器、库文件、头文件以及结构体定义等等)
编译库:
编译所有例程都需要用到的基础库
cd lib
make
得到静态库文件:libudp.a
继续编译基本库
$ cd ../libfree/
$ make
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o in_cksum.o in_cksum.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype
size_t size;
^
In file included from inet_ntop.c:27:0:
/usr/include/arpa/inet.h:64:20: error: prototype declaration
extern const char *inet_ntop (int __af, const void *__restrict __cp,
^
make: *** [inet_ntop.o] Error 1
出现错误!仔细查看发是在 inet_ntop方法中的参数size的类型,与声明在 /usr/include/arpa/inet.h中的inet_ntop()中的size参数类型不一致导致
使用 vim /usr/include/arpa/inet.h 命令查看inet_ntop函数的声明,发现其size的类型为socklen_t,所以将原size类型改为socklen_t就可以了,然后还要修改inet_ntop4()和inet_ntop()6函数的参数类型,然后就大功告成。
再次编译
$ make
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_pton.o inet_pton.c
ar rv ../libunp.a in_cksum.o inet_ntop.o inet_pton.o
a - in_cksum.o
a - inet_ntop.o
a - inet_pton.o
ranlib ../libunp.a
貌似这次编译的内容并到了libunp.a中,没有生成新的库文件。
$ cd ../libgai
$ make
ar rv ../libunp.a
ranlib ../libunp.a
拷贝生成的库文件到系统库目录
$ cd ..
$ sudo cp libunp.a /usr/lib
$ sudo cp libunp.a /usr/lib32
将unp.h中 #include "../config.h" 修改为#include "config.h",并将其和config.h拷贝到/usr/include中,
然后编译源代码
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
跟普通的编译不一样的是要在最后加上刚才那个链接库,-l参数加上刚才那个libunp.a去掉lib和后面的.a。最后得到参数-lunp。
相关文章推荐
- Unix网络编程第三版源码编译
- Unix网络编程第三版源码编译
- Unix网络编程第三版源码编译
- Unix网络编程第三版源码编译
- Unix网络编程第三版源码编译
- unix网络编程源码编译问题
- Unix网络编程(卷二)unpv 源码下载及编译报错解决
- unix网络编程 ubuntu下搭建环境编译源码
- unix网络编程书籍源码编译和测试
- Unix网络编程(卷二)源码编译报错解决
- unix网络编程源码编译出错分析
- unix网络编程源码编译问题
- Unix环境高级编程第三版源码编译错误
- UNIX网络编程 源码如何编译
- UNIX环境高级编程第三版源码编译
- 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
- 《Unix网络编程》(第三版)源码使用方法
- php 5.4.10 + nginx1.0.15 + PostgreSQL 9.1.3 源码编译自动化部署第三版
- APUE第三版源码编译问题解决[更新中。。]
- [置顶] Unix网络编程(卷二)源码编译报错解决 .