問題闡述:linux
本人使用mini6410開發了一個sqlite數據庫的程序,在mini6410的linux系統下已經可以成功運行了。由於Android使用的也是linux內核,因此我想固然的認爲按照一樣的方法將程序移植到mini6410的android系統中也能夠成功運行,可是當我運行程序的時候卻提示我不能找到可執行文件(xlisten-arm是交叉編譯出來的可執行文件):android
/ # ./xlisten-arm
/system/bin/sh: ./xlisten-arm: not foundsql
1.探索:數據庫
在網上搜索起初認爲多是庫文件的不全致使的,因而在查看可執行文件xlisten-arm所須要的動態連接庫:函數
執行語句:spa
知道所需的動態連接庫後,到android文件系統中去照着寫庫文件,在目錄/system/lib 中,果真缺乏相應的庫文件,因而認爲找到了我問題的根源所在,在複製相應庫文件的時候爲了保留原來的屬性,還特地用了sqlite
誰知將這些庫都添加進去之後,仍然無濟於事!開發
看來不單單事庫文件缺失的問題了,並且通常來講,若是真的是由於缺乏庫文件而致使的問題,終端會提示咱們連接某庫文件時沒有找到該庫文件。get
2.正確的解決方法:it
將程序編譯的時候選擇靜態編譯,即便用選項 -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!可以正確的執行了!