在www.unpbook.com上下载源码,或者直接搜那个源码压缩包可以搜到,注意用的是13e版本,网上很多是第二版的。然后按照里面的README进行MAKE生成静态库文件,然后将两个头文件放到/usr/include下,将静态库文件放到/usr/lib和/usr/lib64下。

还要有apue的代码,这个我忘了有没生成静态库文件了,哦,其实没用到apue的代码,只是用到apueerror.h,这个网上搜一下搜到的,然后里面有#include<apue.h>,但是没用到,我把这行注释了也能没问题。

然后环境就差不多弄好了,里面还有一些细节问题,比如某个size_t size 要改成socket_t size,还有头文件unp.h里的include "../config.h"要改成 "config.h"(大概是这样,可能有点差别,详情网上搜一下)。

然后编译第一章的服务器程序,发现包裹函数Bind、Socket之类的没定义,这些函数在unp.h里有声明,定义估计是在libunp.a里,网上搜了下,在gcc命令行末尾加上-lunp就行了,大概是让加入libunp.a这个静态链接库一起链接吧。使用g++编译出错,gcc就没问题,百度了下原来g++把.c也当成c++来编译了,然后

#include
int main(int argc, char* argv[]) {
   if(argv == 0) return;
   printString(argv);
   return;
}
int printString(char* string) {
  sprintf(string, "This is a test.\n");
}

这种情况,c语言可以,c++会报错。出错原因应该是类似这个吧。哦,好像是gcc只编译,要链接需要的库的话要加-l,g++能自动链接。

编译链接第一章的客户端、服务器程序,都能生成可执行文件的话就说明没问题了。然后要打开服务器程序,需要sudo。然后执行客户端程序访问本地127.0.0.1,就能得到时间。