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盤根目錄下建...