1.概述
關(guān)于libnoPoll移植到SylixOS的移植過(guò)程及移植方法參考工程技術(shù)筆記《移植libnopoll到SylixOS技術(shù)筆記》。本篇文檔旨在描述移植過(guò)程遇到的問(wèn)題及解決問(wèn)題的方法。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括嘉魚(yú)網(wǎng)站建設(shè)、嘉魚(yú)網(wǎng)站制作、嘉魚(yú)網(wǎng)頁(yè)制作以及嘉魚(yú)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,嘉魚(yú)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到嘉魚(yú)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
2、問(wèn)題描述及解決方法
2.1 編譯提示未定義選項(xiàng)
在完成libnoPoll庫(kù)工程的創(chuàng)建后,在編譯時(shí)提示“'SO_BINDTODEVICE'undeclared (first use in this function)”,經(jīng)過(guò)查閱資料得知‘SO_BINDTODEVICE’是一個(gè)套接字選項(xiàng),該選項(xiàng)用于將套接口綁定到指定的網(wǎng)絡(luò)接口上。一般用于實(shí)現(xiàn)多網(wǎng)口負(fù)載均衡的方法。通常調(diào)用setsockopt接口對(duì)某個(gè)套接口進(jìn)行套接字選項(xiàng)的設(shè)置。
在SylixOS中setsockopt函數(shù)原型如下所示。
#include <sys/socket.h>
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
函數(shù)setsockopt原型分析:
此函數(shù)成功時(shí)返回0,失敗時(shí)返回-1并設(shè)置錯(cuò)誤號(hào);
參數(shù)s是套接字(socket函數(shù)返回);
參數(shù)level是選項(xiàng)等級(jí)如下表 所示;
參數(shù)optname是選項(xiàng)名如下表所示;
參數(shù)optval是選項(xiàng)值;
參數(shù)optlen是選項(xiàng)長(zhǎng)度。
通過(guò)調(diào)用setsockopt函數(shù)來(lái)設(shè)置不同選項(xiàng)等級(jí)的不同選項(xiàng),參數(shù)optval是一個(gè)指向變量的指針類型,根據(jù)不同的選項(xiàng),類型也不同。
在libnoPoll中的調(diào)用如下所示。
setsockopt (socket, SOL_SOCKET, SO_BINDTODEVICE, options->_interface, strlen (options->_interface));
對(duì)于'SO_BINDTODEVICE'套接字選項(xiàng),在Linux的man手冊(cè)中,有如下三點(diǎn)結(jié)論:
2.2 測(cè)試用例運(yùn)行時(shí)出錯(cuò)
在libnoPoll的測(cè)試代碼中會(huì)使用system函數(shù)來(lái)運(yùn)行某些shell命令,但有些shell命令在SylixOS下并不支持或支持相同功能但shell命令名不同,因此,在測(cè)試代碼運(yùn)行過(guò)程中有可能會(huì)出錯(cuò),遇到這種情況,可根據(jù)具體情況修改libnoPoll中提供的測(cè)試代碼。
在RealEvo IDE的base工程中,默認(rèn)會(huì)有l(wèi)ibcextern(SylixOS C庫(kù))和libsylixos(SylixOS內(nèi)核組件)這兩個(gè)工程文件夾,在編譯base工程后會(huì)生成C庫(kù)文件和內(nèi)核庫(kù)文件。在測(cè)試用例運(yùn)行失敗后,通過(guò)跟蹤源代碼,發(fā)現(xiàn)在C庫(kù)和內(nèi)核庫(kù)中都同時(shí)定義了getaddrinfo接口。默認(rèn)情況下,在應(yīng)用程序沒(méi)有指定引用哪個(gè)庫(kù)文件時(shí),編譯時(shí)會(huì)使用內(nèi)核庫(kù)中定義的函數(shù)。在工程屬性中可以重新設(shè)置引用的庫(kù)文件,通過(guò)將應(yīng)用程序重新指定使用C庫(kù)之后,重新編譯應(yīng)用程序,再次部署就能夠正常運(yùn)行。
2.3 總結(jié)
由于大多數(shù)移植的中間件是從Linux下的工程移植過(guò)來(lái)的,因此,對(duì)于SylixOS不支持的特性,通常做法是看SylixOS有沒(méi)有可替換的方案,如果沒(méi)有的話,現(xiàn)階段是以裁剪為主。刪去不必要的功能。
當(dāng)前標(biāo)題:移植libnoPoll到SylixOS遇到的問(wèn)題總結(jié)
網(wǎng)站地址:http://jinyejixie.com/article44/iicjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站、App開(kāi)發(fā)、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)