09
02

Shared library on embedded platform-以ARM9和uClibc為例

在講解UI upgrade之前,先談談Linux的shared library,因為這對往後要交叉編譯的應用軟體是蠻重要的事情,在四,五年前,ARM一直都以NO MMU姿態出現在各個不同的嵌入式平台,所以當時所有的可執行檔都編成static binary外加去頭(用objcopy把elf頭檔幹掉),這樣做是因為NO MMU的LINUX不能吃ELF格式的可執行檔,而近幾年ARM with MMU支援的平台越來越多,所以很多人把應用軟體諸如busybox, lighttpd…等都編譯成shared binary elf格式的可執行檔

因為ARM9有MMU,所以ARM9 Linux可以吃ELF格式的檔案,並且也能動態連結shared library,而這讓我們編譯程式上有更多的可行性,如果以static binary和shared binary分類,那編譯的方式大概如下(這邊舉的例子都是用ELDK編譯,所以請先下載ELDK+uClibc支援的toolchain)
(1) static binary:
編譯方式:arm-linux-gcc –static –o hello hello.c
編譯出來的結果用file指令查詢如下

(2) shared binary:
編譯方式:arm-linux-gcc –o hello hello.c
編譯出來的結果用file指令查詢如下

Static binary只要直接擺在arm9 linux的平台就可以執行了,而shared library需要一段手續
(1)用arm-linux-ldd查詢得知要執行hello程式需要libc.so.0,如下圖


(2)到ELDK toolchain安裝的資料夾arm/lib下找尋ld-uClibc-0.9.27.so和libuClibc-0.9.27.so,並把這兩個檔案複製到目標板的/lib資料夾,並把它們屬性改為可執行
(3)新增symbolic link,如下圖片,我總共新增了libc.so.0, libc.so,和ld-uClibc.so.0這三個symbolic link

做完上述三件事,可以試著執行看看動態連結的可執行檔hello,而動態連結和elf檔的詳細說明請參考以下網站

1.gcc與Obj檔,動態連結與ELF檔

2.Linux動態函式庫解析

標籤: embedded
評論: 0 | 引用: 0 | 閱讀: 8820
發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片 選 項:
頭 像:
內 容: