如何在android系統上執行c語言的程式

2021-12-19 13:18:31 字數 2111 閱讀 6571

1樓:福喜

本人使用mini6410開發了一個sqlite資料庫的程式,在mini6410的linux系統下已經能夠成功執行了。因為android使用的也是linux核心,所以我想當然的認為按照同樣的方法將程式移植到mini6410的android系統中也可以成功執行,但是當我執行程式的時候卻提示我不能找到可執行檔案(xlisten-arm是交叉編譯出來的可執行檔案):

/ # ./xlisten-arm

/system/bin/sh: ./xlisten-arm: not found

1.探索:

在網上搜尋起初認為可能是庫檔案的不全導致的,於是在檢視可執行檔案xlisten-arm所需要的動態連結庫:

執行語句:

# arm-linux-readelf -a ./xlisten-arm | grep "shared"

0x00000001 (needed) shared library: [libsqlite3.so.0]

0x00000001 (needed) shared library: [libm.so.6]

0x00000001 (needed) shared library: [libcrypt.so.1]

0x00000001 (needed) shared library: [libpthread.so.0]

0x00000001 (needed) shared library: [libdl.so.2]

0x00000001 (needed) shared library: [libc.so.6]

知道所需的動態連結庫後,到android檔案系統中去照著寫庫檔案,在目錄/system/lib 中,果然缺少相應的庫檔案,於是認為找到了我問題的根源所在,在複製相應庫檔案的時候為了保留原來的屬性,還特意用了

#cp -a filename dir

誰知將這些庫都新增進去以後,仍然無濟於事!

看來不僅僅事庫檔案缺失的問題了,而且一般來說,如果真的是因為缺少庫檔案而導致的問題,終端會提示我們連結某庫檔案時沒有找到該庫檔案。

2.正確的解決方法:

將程式編譯的時候選擇靜態編譯,即使用選項 -static

我是對makefile檔案中的cflag變數進行修改

cflags = -wall

改為;cflags = -wall -static

然而此時又出現問題了:

undefined reference to `pthread_mutex_*'

undefined reference to `dl*'

提示沒有定義這些函式,於是在包含的庫檔案中新增了這兩個庫檔案

在makefile中,修改libs變數;

libs = -lsqlite3 -lm -lcrypt

改為:libs = -lsqlite3 -lm -lcrypt -lpthread -ldl

然後進行交叉編譯,成功了!

編譯出來的可執行檔案比較大,因為事靜態編譯的,我的有2m多,

拷貝到開發板的andriod系統中,

修改許可權:

#chmod 777 xlisten-arm

執行:/ # ./xlisten-arm

ok!能夠正確的執行了!

2樓:匿名使用者

庫依賴問題比較難解決,不過現在很多手機安裝ubuntu等linux了,可以試試啊

如何在 android 系統中用 c 語言編寫程式並執行?需要安裝什麼軟體?

3樓:小青年寶哥

在安卓系統中?沒有編譯器吧!

4樓:詭異_流浪者

你是說用android手機寫c程式嗎??是的話用手機軟體c4

安卓系統上能執行c語言的程式嗎

5樓:閆哥情感心理

您好,不可以在安卓裡面執行c語言程式的。

希望能幫到您,望採納,謝謝!

如何在android系統中獲得客戶端mac地址

mac media access control或者medium access control 地址,意譯為 訪問控制,或稱為實體地址 硬體地址,用來定義網路裝置的位置。在osi模型中,第三層網路層負責 ip地址,第二層資料鏈路層則負責 mac地址。因此一個主機會有一個mac地址,而每個網路位置會有...

如何在Steam上執行國服DOTA

庫 dota2 右鍵啟動項,然後輸入 perfectworld 在8月6日比賽當中,ti5勝者組迎來了lgd戰隊和cdec之間的比賽,lgd內戰一直以來都是lgd戰隊佔據一定的優勢,但是在今天的勝者組比賽當中,讓人沒有想到的是,cdec戰隊居然以非常輕鬆的態勢輕鬆碾壓了lgd戰隊,下面就讓我們一起通...

如何在32位系統上安裝64位系統

直接換64位系統就行咯,重做系統會嗎?可以本地重灌,怎麼?你要裝?回答1 把映象用虛擬光碟機載入,然後拷貝到任一硬碟分割槽中,我的是e windwos7。2 把e windwos7目錄下的bootmgr和boot目錄 其實只要裡面的boot.sdi和bcd檔案 拷貝到c盤根目錄下,並在c盤根目錄下建...