在Symbian OS平台上移植C語言工程的方法

2021-09-30 15:50:25 字數 1645 閱讀 7864

symbian是應用於高階手機(智慧型手機)上的一種作業系統,諾基亞、索愛的高階手機便是基於symbian作業系統的,symbian os的優勢在於其高穩定性和節能性,並且有眾多主流手機產商的支援,現在是高階手機上的主流作業系統之一。在synbian os上的應用開發主要是以c++語言為主,但是也支援c語言的程式,把原有的c語言工程移植到symbian os上也是很容易的,其方法有如下幾點:

1、首先要考慮c語言和c++語言的混合程式設計問題,因為在ui層肯定是要以c++語言來設計的,ui層中的**無法被移植,必須結合平台上的ui設計方法來設計,而ui層中要實現的功能可以用c語言來實現,所以要考慮好哪些應該用c++來設計,哪些應該用c語言來設計,如果出現c語言中的**呼叫c++中的**(這種情況應該盡量避免),則該c語言的**必須用c++來編譯,用c++來編譯的檔名最好以「cpp」為副檔名,在c++中引用c的**是最好加上「extern 「c」 {}」,在用c編譯的標頭檔案中要有這樣的修飾:

#ifdef __cplusplus

extern "c"

#endif;

2、在程式退出之前要呼叫closestdlib(),以釋放所有緩衝,該函式在「reent.h」檔案中;

3、在mmp檔案中要加入「estlib.lib」,該lib庫是c標準語言的lib庫;

4、symbian中的stdlib並沒有完全實現posix的全部標準,所以有些c庫的函式要自己實現或用其它方法來替代;

5、在c語言工程中最好不要有可寫的全域性靜態變數(global writeable static data),在有些手機版本中是不支援全域性變數的,但可以有全域性靜態常量,對於全域性指標常量注意要這樣申明,例如:static const char* const,即要有兩個「const」。如果有出現全域性靜態變數或靜態常量,則在mmp檔案中要加入「epocallowdlldata」標識,否則會出現編譯錯誤。對於可寫的全域性靜態變數有種處理方法是把所有全域性變數放到乙個struct結構中,然後這個結構的指標用dll::settls()和dll::tls()來訪問,存在的問題是用c編譯的**中無法呼叫c++的這種方法,還有一種最笨的處理方法是把指標的值存入乙個檔案中;

6、在c++與c的互動介面中會存在如char*與tdesc之間的轉換,可以這樣轉換,例如:

把tdesc轉換成char*:

hbufc8* utf8temptext = hbufc8::newlc(string_length);

tptr8 utf8text(utf8temptext->des());                                

cnvutfconverter::convertfromunicodetoutf8(utf8text,tdescstring);   

char*  cstring = (char*)utf8text.ptr();

把char*轉換成tptr:

tptr8 utf8text((ttext8*)cstring,strlen(cstring),strlen(cstring));

hbufc* ucs2temptext = hbufc::newlc(utf8text.length()*2);

tptr ucs2text(ucs2temptext->des());  

cnvutfconverter::converttounicodefromutf8(ucs2text,utf8text);

在ARM Linux平台上移植SQLite

在arm linux平台上移植sqlite 首先從http sqlite.org 的quick start文件中的測試程式為例對移植到arm linux上的sqlite3進行測試。該程式清單如下 include include static int callback void notused,int...

OpenCV在龍芯平台上的移植

opencv 2.2.0的移植方法 按照文章 opencv在arm上的移植 emouse 給出的步驟方法進行 修改的地方 1 原指定交叉編譯器為arm的都改為mipsel,交叉編譯器的路徑也為redhat虛擬機器中的實際路徑 usr local mips linux gcc gcc 3.4.6 2f...

在MTK平台上部署CDMA

在mtk平台上部署cdma 注 我們用的mtk版本是6225 cdma 模組是威盛via的。此專案沒有量產,放在那也是加密冷藏沒有價值,寫思路出來與大家討論關於程式設計。本人不是mtk專家,有分析不對之處,請指出,謝謝。硬體篇 加乙個cdma模組,具體操作本人不知道,就不講述了。軟體篇 讓我們來分析...