首先要到spserver目录下,至于其他的,ssl之类的,我先不管了。
阅读README,按照说明修改MAKEFILE中关于libevent共享库的路径,在当前目录下,
make
报错,如下:
spioutils.cpp: 在静态成员函数‘static int SP_IOUtils::tcpListen(const char*, int*, int, int)’中:
spioutils.cpp:201:39: 错误:‘fchmod’在此作用域中尚未声明
make: *** [spioutils.o] 错误 1
fchmod是一个改变文件权限的函数,头文件为:sys/stat.h。首先,打开spioutils.cpp文件,看看其包含的头文件并没有stat.h,于是将其包含进来,我是将其包含到了spporting.hpp这个文件中。到此遇到的第一个问题解决。(难道这个版本的spserver真有这个BUG?)
遇到的第二个问题便是:
spiochannel.cpp:25:19: 致命错误:event.h:没有那个文件或目录。
打开spiochannel.cpp,25行就是包含event.h文件,没有?不存在?
解决这个问题,我是怀疑我之前修改的MAKEFILE文件是否修改正确了,仔细检查以后,发现,libevent的include路径没有写对,改过来,就把这个问题解决了。以后要分清楚是include还是lib,这两者是有差别的。
接下来,遇到第三个问题,当我执行make之后,请看下面的报错信息,这个时候已经凌晨2:45了,我当时心理无数遍臭骂软件作者,BUG一大堆。
不过,我静下心来分析了一下,是不是自己那里有问题?因为本身就
spbuffer.cpp:90:32: 错误:赋值运算的左操作数必须是左值
这个错误来说,我查看了源码以后,是在不敢怀疑是这行代码的错,于是再仔细查看README,发现了,我之前安装的libevent版本过高,而spserver之软件作者说了,只在版本1.1和1.2做过测试,于是安装libevent的1.2版本,并且修改MAKEFILE中相关路径,make,通过。
太开心了。不枉我凌晨工作呀。
赶紧测试一下demo是否ok。
不OK。
启动testsmtp失败,首先是libspserver.so找不到,这个好解决,建立一个符号链接就可以了。注意,建立符号链接的时候,最好使用绝对路径建立。
解决这个问题以后,启动testsmtp还是失败,抓狂!!!
./testsmtp: symbol lookup error: ./testsmtp: undefined symbol: _ZTI21SP_SmtpHandlerFactory
一天之后,在我苦寻解决方案无果之后,很郁闷的检查起编译过程。我使用ldd查看了需要的动态链接库,一个一个的检查起来,意外的发现诡异事件:
/usr/lib底下有个动态链接名不副实,就是libspserver.so指向了libevent.so
挂羊头卖狗肉么这是!!
于是知道是自己之前链接弄错了,赶紧作相应修改,OK。
提醒自己:一定要非常小心。