unix网络编程第三版环境配置

时间:2022-11-06 20:38:08

       根据unp3前沿部分的“如何使用本书”,决定先看本书的第二部分,即第3至11章,这部分偏实践。
       当看到确定主机字节序的时候出现了一段程序:

#include "unp.h"

int
main(int argc, char **argv)
{
    union {
      short  s;
      char   c[sizeof(short)];
    } un;

    un.s = 0x0102;
    printf("%s: ", CPU_VENDOR_OS);
    if (sizeof(short) == 2) {
        if (un.c[0] == 1 && un.c[1] == 2)
            printf("big-endian\n");
        else if (un.c[0] == 2 && un.c[1] == 1)
            printf("little-endian\n");
        else
            printf("unknown\n");
    } else
        printf("sizeof(short) = %d\n", sizeof(short));

    exit(0);
}

       发现这里有个头文件“unp.h”头文件,这是unix netword programming的缩写,即作者将一些头文件整合在了unp.h中,就跟Unix环境高级编程中的apue.h类似。
       于是先到网上下载了unp第三版的源码,解压,按照README开始编译。但到了lib下make时开始报错:net_ntop.c:61: error: argument ‘size’ doesn’t match prototype。从报错信息来看是类型不匹配。网速搜来搜,已经有人解决了,找到了个能解决我的问题的方案:

第一步:在终端中进入upnv13e目录,然后执行代码:
./configure  

第二步:这里有问题及解决方法
cd lib 
make(如果报如下错误:             inet_ntop.c:61: error: argument 'size' doesn't match prototype
                                               /usr/include/arpa/inet.h:153: error: prototype declaration
                                                   inet_ntop.c第61行 size_t size ->改成 socklen_t size)
第三步:这一步没有问题
cd ../libfree 
make  

第四步:

cd ../libgai
make 
cd ..   //回到unpv13e目录
然后拷贝生成的ku到系统库目录:
sudo cp libunp.a /usr/lib  
sudo cp libunp.a /usr/lib32

第五步:修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便
vim  lib/unp.h    
sudo cp lib/unp.h /usr/include  
sudo cp config.h /usr/include 
以后编译代码的时候加上-lunp链接我们的库。(貌似只能用gcc,不能用g++)

原文链接如下:http://zhidao.baidu.com/link?url=QPOLizaHzEWU7lRfWQUjzGt0Q4g4739dfp8ZlhMovo78tjjNb3RPdmUrjYV-HJj0VYQ80AxbO-XLSJYRiyGD0DxyuM4lCHtp4qXyJdOnelm
       配好环境后进intro目录make下,然后./byteorder运行成功!
注:我用的是ubuntu 12.04, 64位系统。