根据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位系统。