libmxml (Mini-XML) arm-linux 移植筆記

libmxml (Mini-XML) arm-linux 移植筆記

20 May 2010linux

libmxml (mini-xml)

一個輕量級的xml庫,可完成讀寫。適合系統資源受限的嵌入式設備。測試

項目主頁

(http://www.minixml.org/)spa

移植過程:

首先準備好交叉編譯環境。我使用的是eabi生成的arm-linux-gcc 4.3.2,位於/usr/local/arm/4.3.2/;環境變量已經設置/usr/local/arm/4.3.2/bincode

主機環境xml

  • linux-mint 8 i386
  • arm-linux-gcc 4.3.2 (eabi)
  • gcc 4.4

目標機環境資源

  • 友善之臂mini2440開發板
  • linux 2.6.31

下載源碼,獲得mxml-2.6.tar.gz開發

解壓,進入mxmx-2.6編譯器

./configure --enable-shared --host=arm-linux

make

接着make報錯:源碼

Testing library... 

./testmxml test.xml > temp1.xml 2 > temp1s.xml 

make: *** [testmxml] 錯誤   2

這是測試編譯出的可執行文件是否能夠正常運行時失敗的結果。廢話,arm-linux-gcc編譯出的東西在主機上顯然不能運行。編譯

可是在 Testing library 以前,編譯已經所有結束。咱們能夠直接拿走要用的文件。

有用的文件一共 5個:

  • mxml.h 頭文件
  • libmxml.a 靜態連接庫文件
  • libmxml.so 動態連接庫的連接文件,連接到libmxml.so.1.4
  • libmxml.so.1 動態連接庫的連接文件,連接到libmxml.so.1.4
  • libmxml.so.1.4 動態連接庫本體

把庫文件複製到交叉編譯鏈所在位置:

我之因此沒有在configure的時候直接設定prefix,是由於 eabi生成的編譯鏈的文件結構有點詭異,頭的存放目錄和庫文件存放目錄不在一個父目錄下。

mxml.h         → /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
libmxml.a      → /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
libmxml.so     → /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib  
libmxml.so.1   → /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib  
libmxml.so.1.4 → /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

對於其餘版本的 gcc,路徑極可能不同。在這裏咱們應該靈活處理。

在交叉編譯鏈所在目錄中:

  • 搜索頭文件最多的目錄,用來存放頭文件。這個目錄下通常有不少子文件夾。若是不行,就在每一個有頭文件存放的位置都放一個mxml.h,以保證編譯器能找到該文件
  • 搜多存有.so文件的目錄(通常有多個),每一個都把動態連接庫和靜態連接庫的全部文件放進去。以保證編譯器能找到。
  • 相同的文件存放在多個目錄,必定保證這些文件徹底一致。即同一次編譯的產物。

在庫文件和頭文件就位後,咱們就能夠在項目中使用 libmxml 了。

使用方法:

一、添加

#include <mxml.h>

二、增長編譯參數

例如

arm-linux-gcc -o test test.c -lmxml -lpthread

其中-lpthread是必選參數,由於libmxml庫用到了pthread庫

在編譯時,編譯器會優先選擇動態連接庫編譯,這樣編譯出的文件會小不少。可是同時也須要目標板上有動態連接庫支持。若是想靜態編譯,在編譯參數中加上-static

爲目標機添加動態連接庫

  • libmxml.so
  • libmxml.so.1
  • libmxml.so.1.4

複製到目標板的庫目錄,通常爲/lib/usr/lib

這樣,動態編譯的文件就能在目標板上運行了。