91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux程序移植到android上

發布時間:2020-08-04 04:09:31 來源:網絡 閱讀:19514 作者:thedevilking 欄目:移動開發

序言(廢話):


由于本人還是比較偏重于先說明原理在說明實際操作步驟,要知其然更要知其所以然,如下圖所示:

linux程序移植到android上


傳統的linux系統中的程序基本都依賴于glibc(至于什么是glibc可以百度去),而右邊AOSP(Android Open-Source Project)的程序基本都是依賴于Bionic(由谷歌公司開發類庫,用來替代glibc)。這就決定了要想移植linux上的程序到android上就必須解決這個依賴的類庫不同的問題。

一般情況下,有兩種方法。

一個就是將程序靜態編譯,將程序中所有需要的庫全部編譯進可執行文件中。這樣程序在android中運行就不需要鏈接任何動態庫了。但是帶來一個非常大的弊端就是這個程序會非常大,資源利用會非常低下。一個簡單的helloWorld!都可以達到好幾百k

另一個就是用ld-llinux.so.3來替代android系統中/system/bin/linker來作為鏈接器進行動態鏈接,當然這就需要將相應的動態庫也拷貝到android中(個人理解,如果表述不夠準確請指正)。這樣就可以進行動態鏈接,并且正常運行了。



靜態編譯方法:

首先我們以移植一個helloworld程序作為例子。


  • #include<stdio.h>

  • void main()

  • {

  • printf("HelloWorld!\n");

  • }


輸入命令進行靜態編譯:arm-none-linux-gnueabi-gcc hello.c -static -o hello.out

然后利用adb push helllo.out放進android設備的/system/bin目錄中,

chmod 755 /system/bin/hello.out 更改其為執行權限。

輸入: hello.out 即可看到屏幕上輸出HelloWorld!

如上說所一樣,這個hello.out程序有近650k,而且其使用的代碼不可重用。



動態鏈接方法:

動態鏈接依舊按照上述helloworld程序作為例子。

編譯命令為:arm-none-linux-gnueabi-gcchello.c -ohello.out -Wl,-dynamic-linker=/system/lib/ld-linux.so.3  

這里需要說明的是,這個/system/lib是指android手機中存放連接器ld-linux.so.3的目錄。正式利用這個連接器來替代android系統中/system/bin/linker才能動態鏈接運行程序。

也可以加入參數 -Wl,-rpath,/system/armcrosslib 在編譯時指定運行時的動態庫查找目錄。

編譯完成后,可以輸入命令 readelf -d hello.out 來查看它的動態鏈接庫有哪些。比如這個helloworld程序的動態鏈接庫如下圖所示:

linux程序移植到android上


可以看到libgcc_s.so.1libc.so.6就是這個helloworld所需要的動態鏈接庫。

然后找到arm-none-linux-gnueabi-gcc的安裝目錄。如果你是解壓壓縮包配置path的安裝路徑的話,這些動態鏈接庫文件就在./arm-none-linux-gnueabi/libc/armv4t/lib 下。

找到ld-linux.so.3和上述需要的動態鏈接庫,將他們cp 出來。

然后,利用adb push 將他們放入android系統的/system/lib目錄下,將hello.out放入到/system/bin下,更改hello.outld-linux.so.3的權限為可執行即可(chmod 755 hello.out)。這里需要說明一下,ld-linux.so.3作為他們的連接器,一定需要可執行權限,否則就會提示permission denied

做好這些后,輸入hello.out 即可看到屏幕打出helloworld



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乾安县| 霸州市| 大余县| 乐都县| 玉屏| 寿宁县| 重庆市| 寿阳县| 读书| 垫江县| 建阳市| 玛多县| 唐河县| 沙河市| 弥勒县| 栾川县| 平利县| 沧州市| 红安县| 黄平县| 平顺县| 浙江省| 四会市| 富宁县| 定结县| 兰坪| 司法| 高碑店市| 南皮县| 阳原县| 红桥区| 沙湾县| 吴堡县| 宁乡县| 漳州市| 托克托县| 乌兰浩特市| 溧阳市| 库尔勒市| 榕江县| 杭锦旗|