编译spserver-0.9.5手记

来源:互联网 发布:如何查询海关数据 编辑:程序博客网 时间:2024/04/29 13:54

首先要到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。

 

提醒自己:一定要非常小心。