編譯spserver 0 9 5手記

2021-08-25 20:04:47 字數 2809 閱讀 9724

首先要到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_smtphandle***ctory

/usr/lib底下有個動態鏈結名不副實,就是libspserver.so指向了libevent.so

掛羊頭賣狗肉麼這是!!

於是知道是自己之前鏈結弄錯了,趕緊作相應修改,ok。

編譯spserver 0 9 5手記

首先要到spserver目錄下,至於其他的,ssl之類的,我先不管了。閱讀readme,按照說明修改makefile中關於libevent共享庫的路徑,在當前目錄下,make 報錯,如下 spioutils.cpp 在靜態成員函式 static int sp ioutils tcplisten co...

Linux入門2 手記

首先要了解命令列提示符的資訊 1.root 當前登入賬戶。2.localhost主機名 3.當前目錄,表示當前使用者的家目錄。root為 root。如果是普通使用者,例如user1,則是 home user1。4.超級使用者的標誌,如果是普通使用者,則是 用來區分是否是超級使用者 一般命令的格式 命...

PHP版本公升級5 4手記

我們公司伺服器上的php版本是5.2,真的太舊了,除了很多新特性無法使用之外,php5.4的效能也比5.2版本有所提高,有助於提供業務的吞吐量。今年,我們計畫將公司所有業務的php版本公升級為5.4.41。從 php 5.2.x 移植到 php 5.3.x 從 php 5.3.x 遷移到 php 5...