花了2周時間移植了log4c1.2.2,比預想的時間長了點大概做了以下幾件事:
移植log4c到win32 pc平臺
移植log4c到arm和mips平臺
編譯成dll文件并測試
log4c的結構非常清晰主要就是3個東西:
layout:輸出日志的打印格式(dated, basic 等).
appender:輸出日志的目的地(stdout、本地文件、輪詢文件等)需要指定它的layout.
category:每一條日志的模塊名稱(名字自取),需要指定它的appender.
log4c到目前為止對linux支持的最好,基本不用做什么修改就能直接編譯。在windows上面移植難度也不大,有幾個小的結構找不到,做一些替換就行。由于對log4c內部的xml解析模塊沒有看懂,而且覺得它用的東西有點復雜,所以在網上找了個最近比較流行的xml解析工具rapidxml,確實好用。并根據log4c的init模塊自己重新寫了讀取xml配置文件和初始化log4c模塊,反正就是參照它的初始化步驟改的。
移植到wince上有很多問題,主要的就是wince缺少stat.h、string.h和io.h頭文件,對于我這種第一次在嵌入式上開發的菜鳥來說替換那幾個頭文件的函數確實費了一點時間。其中對string.h中的幾個字符串操作函數自己進行了重寫(幸好io.h的接口都找到了wince下的替代函數。。。)
另外在編譯成dll文件后測試發現程序老是報fatal錯誤,后來才知道原來是棧空間分配太少,以后對wince編程棧空間的分配一定要注意!
最后還做了個支持unicode的日志接口,不過由于log4c內部沒有寬字符的打印函數,導致在輸入變參時只能輸出變參的頭一個字符,也是因為我對c的變參函數還不是完全掌握有關。這個遺留問題還得解決。
另外發現程序中頻繁malloc內存容易造成內存碎片,對于頻繁分配的內存盡量使用數組形式。
通過這段時間熟悉了dll的基本原理對wince下的編碼特性也有了一定的了解。
編程熟練度和解決問題去網上找答案的能力還有待提高。
posted on 2010-06-04 10:34
saha 閱讀(3651)
評論(2) 編輯 收藏 引用