談OSIP2在QT下的編譯Compiling

有非常淺薄的應用場景,去簡單地使用SIP消息,而OSIP2 SIP協議棧,其開源證書相對友好,又同時支持瞭解析、構造消息,但無事務層、對話層狀態機涉入的可能。

 簡單地使用osip2消息子層sublayer模式如此:

                / / allocation/release of memory.

                xxxx_init(osip_xxx_t **el);

                xxxx_free(osip_xxx_t *el);

	xxxx_parse(osip_xxx_t *el, char *source);
	xxxx_to_str(osip_xxx_t *el, char **dest);

消息buffer自己利用套接字進行收發。但,首要地是要完成在QT下的編譯。

最開始覺得這件事情,可能是件非常困難的事情,但是後來想想,其實自己忽略了OSIP2自己提供的configure腳本以及自帶vs平臺工程文件的指導價值。

簡單參考了下上述信息,考慮了多線程的編譯設置問題,在QT選擇庫工程順利地完成了編譯!!!

 

# 共享pro文件設置

TEMPLATE = lib
CONFIG -= qt
CONFIG += staticlib
CONFIG += c++11
TARGET =  osip2
INCLUDEPATH += include/
QMAKE_CFLAGS += -lpthread
#QMAKE_CXXFLAGS += -finput-charset
DEFINES+=HAVE_STRUCT_TIMEVAL HAVE_PTHREAD HAVE_SYS_SEM_H HAVE_FCNTL_H HAVE_SYS_TYPES_H
SOURCES += \
  ...省略    
HEADERS += \ 

  ...省略

 

後來寫一個小測試程序,就疑惑於在測試程序,鏈接osio2庫的當前路徑,使用$$PWD代表了工程所在的目錄,解決了此問題。也瞭解到了,QT的pro文件中的相對路徑,在編譯和鏈接階段具有二義性,用環境變量就可以順利規避此問題。

LIBS+=-L$$PWD/lib/ -losip2

 

# 兩個不太完美的小尾巴

+ 爲了讓編譯通過,自己從網上代碼段,添加了聯合結構semun的代碼生命

union semun {
    int              val;    /* Value for SETVAL */
    struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */
    unsigned short  *array;  /* Array for GETALL, SETALL */
    struct seminfo  *__buf;  /* Buffer for IPC_INFO (Linux specific) */
};
+ osip_mutex_t的前置聲明

 

先使用起來爲先,應該也不影響啥了......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章