日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于glibc的程序在android上的移植

發(fā)布時(shí)間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于glibc的程序在android上的移植 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何將Linux中現(xiàn)有的眾多資源以最小代價(jià)移植到android是很多開發(fā)人員關(guān)注的,下面這篇文章講了一個(gè)比較取巧的方法,我試驗(yàn)了一下,最基本的hello world可以跑,但是復(fù)雜的大型程序要考慮很多問題,thread,IPC,效率等等,還有待驗(yàn)證。

原文地址:

http://groups.google.com/group/android-internals/browse_thread/thread/7c728a36474fbc05

?

在Android上使用動(dòng)態(tài)鏈接庫的一種新方法?-?不使用android linker

?

Android使用的Linker和傳統(tǒng)Linux使用的linker(ld.so,ld-linux.so.2,ld-linux.so.3)不同,

他的Bionic里面的libdl實(shí)際只是一個(gè)stub函數(shù),真正的實(shí)現(xiàn)都在system/bin/Linker里面。

?

我認(rèn)為ld.so針對(duì)a.out格式的二進(jìn)制可執(zhí)行文件,?ld-linux.so.2針對(duì)elf格式的二進(jìn)制可執(zhí)行文件,

ld-linux.so.3是新一代針對(duì)elf格式的二進(jìn)制可執(zhí)行文件的Linker,錯(cuò)了的話請(qǐng)糾正。

實(shí)際上我試驗(yàn)使用ld-linux.so.3代替android的/system/bin/linker來作為系統(tǒng)動(dòng)態(tài)鏈接庫的

linker。

下面給出一個(gè)簡單的例子:?
hello.c?
#include?
int main()?
{?
? ? ? ? printf("\n Hello World \n");?
? ? ? ? return 0;?

?

}?
所用的Toolchain從Code Sourcery得到。使用的是arm gnu/linux系列。

編譯方式:?
arm-none-linux-gnueabi-gcc -o hello.out hello.c -Wl,-dynamic-linker=/yourpath/ld-linux.so.3??(不要使用-static使得程序是動(dòng)態(tài)鏈接)。?

然后找到hello.out依賴的動(dòng)態(tài)庫,這里給出的列表是我猜的(因?yàn)槲业腸gywin里沒有l(wèi)dd)。?
ld-linux.so.3,?
libgcc_s.so,?
libc.so.6?
(其實(shí)用readelf -d也可以找到依賴的動(dòng)態(tài)庫。)

我把這些文件從toolchain庫(libc/usr/lib)里面找出來然后上傳到android emulator的/data/app目錄。?

然后將hello.out上傳到同一個(gè)目錄后然后改變其權(quán)限使其可執(zhí)行(chmod).然后執(zhí)行它,

OK?!!you can get it!!

因此,所有的程序不管它是否動(dòng)態(tài)鏈接庫還是其他的,如果在host系統(tǒng)toolchain能成功按上面方法編譯,那理論上它就可以在android系統(tǒng)上運(yùn)行。你只需要將程序和相應(yīng)的動(dòng)態(tài)庫上傳到合適的目錄。

記住最關(guān)鍵的,編譯時(shí)一定要加上“-Wl,-dynamic-linker=/yourpath/ld-linux.so.3" 。

注意,這里的youpath要和你在android模擬器上執(zhí)行這個(gè)程序時(shí)的路徑一樣,否則會(huì)出not found錯(cuò)誤。最好把ld-linux.so.3拷貝到編譯目錄,并且執(zhí)行時(shí)所有文件都在同一個(gè)目錄。

http://blog.chinaunix.net/uid-223060-id-2215345.html

總結(jié)

以上是生活随笔為你收集整理的基于glibc的程序在android上的移植的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。