编译spserver-0.9.5手记

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

gcc -Wall -D_REENTRANT -D_GNU_SOURCE -g -fPIC -I/usr/local/libevent-2.0.10-stable/include/ -c spiochannel.cpp -o spiochannel.o gcc -Wall -D_REENTRANT -D_GNU_SOURCE -g -fPIC -I/usr/local/libevent-2.0.10-stable/include/ -c spthreadpool.cpp -o spthreadpool.o gcc -Wall -D_REENTRANT -D_GNU_SOURCE -g -fPIC -I/usr/local/libevent-2.0.10-stable/include/ -c event_msgqueue.c -o event_msgqueue.o gcc -Wall -D_REENTRANT -D_GNU_SOURCE -g -fPIC -I/usr/local/libevent-2.0.10-stable/include/ -c spbuffer.cpp -o spbuffer.o spbuffer.cpp: 在成员函数‘int SP_Buffer::truncate(int)’中: spbuffer.cpp:90:32: 错误:赋值运算的左操作数必须是左值 spbuffer.cpp: 在成员函数‘int SP_Buffer::getCapacity()’中: spbuffer.cpp:104:16: 错误:对不完全的类型‘struct sp_evbuffer_t’的非法使用 spbuffer.hpp:15:16: 错误:‘struct sp_evbuffer_t’的前向声明 spbuffer.cpp: 在成员函数‘const void* SP_Buffer::find(const void*, size_t)’中: spbuffer.cpp:159:24: 错误:对不完全的类型‘struct sp_evbuffer_t’的非法使用 spbuffer.hpp:15:16: 错误:‘struct sp_evbuffer_t’的前向声明 spbuffer.cpp:160:25: 错误:对不完全的类型‘struct sp_evbuffer_t’的非法使用 spbuffer.hpp:15:16: 错误:‘struct sp_evbuffer_t’的前向声明 spbuffer.cpp:171:18: 错误:对不完全的类型‘struct sp_evbuffer_t’的非法使用 spbuffer.hpp:15:16: 错误:‘struct sp_evbuffer_t’的前向声明 spbuffer.cpp:171:50: 错误:对不完全的类型‘struct sp_evbuffer_t’的非法使用 spbuffer.hpp:15:16: 错误:‘struct sp_evbuffer_t’的前向声明 spbuffer.cpp: 在成员函数‘int SP_Buffer::getCapacity()’中: spbuffer.cpp:105:1: 警告:在有返回值的函数中,控制流程到达函数尾 make: *** [spbuffer.o] 错误 1
不过,我静下心来分析了一下,是不是自己那里有问题?因为本身就

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。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值