對SQLite-3.3.8(或者SQLite3.3.12)進行交叉編譯,並移植到ARMS3C2410的過程:
要將SQLite3.3.8(或者SQLite-3.3.12)移植到ARM2410開發板上,除了要有底層作業系統的支援外,還必須要有相應的交叉編譯工具鏈。由於ARM2410開發板採用的是ARM-Linux作為底層作業系統,因此需要首先安裝ARM-Linux工具鏈。
1.交叉編譯環境建立:
安裝cross-2.95.3.tar.bz2交叉編譯工具到/usr/arm-linux目錄下。
解壓sqlite-3.3.8到/home/sqlite-3.3.8,並建立檔案夾
cd /home/sqlite-3.3.8
mkdir sqlite-arm-linux
2、修改/home/sqlite-3.3.8目錄下的configure檔案的部分內容
這樣可以讓configure不去檢查你的交叉編譯環境,否則會出現如下同樣的錯誤
checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling,將不能產生Makefile檔案.
20420行 { (exit 1); exit 1; }; }改為 { (echo 1); echo 1; }; }
20446行 { (exit 1); exit 1; }; }改為 { (echo 1); echo 1; }; }
cd /home/sqlite-3.3.8/sqlite-arm-linux
../configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
產生了Makefile檔案,這些將在make時用到.
3、將Makefile檔案中如下語句
BCC = arm-linux-gcc -g -O2
改成:
BCC = gcc -g -O2
4、設定交叉編譯環境
export PATH=/usr/arm-linux/arm/2.95.3/arm-linux/bin:$PATH
設定config_TARGET_CC和config_BUILD_CC兩個環境變數。config_TARGET_CC是交叉編譯器,config_BUILD_CC是主機編譯器:
export config_BUILD_CC=gcc
export config_TARGET_CC=arm-linux-gcc
5、編譯並安裝
make && make install
這裡如果不出意外,將不會出現錯誤,那麼庫檔案已經產生在
/home/sqlite-3.3.8/sqlite-arm-linux/lib目錄下,
庫檔案已經產生在為了減小執行檔案大小可以用strip處理,去掉其中的調試資訊。
arm-linux-strip libsqlit3.so.0.8.6
file sqlite3
sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
由此可知,此時產生的sqlite檔案是還未strip過的。執行命令arm-linux-strip, 去掉其中的調試資訊,這樣檔案將減少很多。(這一步不知道為什麼我實現不了,但是不影響軟體使用)
arm-linux-strip sqlite3
再次用file命令查看sqlite3的資訊:
file sqlite3
sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped
這就是在開發板上可以直接啟動並執行可執行檔。
6、移植
需要注意:
拷貝是需要加上 –arf選項,因為libsqlite3.so,libsqlite3.so.0是連結到libsqlite3.so.0.8.6的。
cd /home/sqlite-3.3.8/sqlite-arm-linux/lib
cp –arf libsqlite3.so libsqlite3.so.0. libsqlite3.so.0.8.6 /usr/qt-sqlite/lib
cd /home/sqlite-3.3.8/bin
cp sqlite3 /usr/qt-sqlite
然後把sqlite3和lib下的庫檔案移植到ARM上
7、在ARM板上運行sqlite
將qlite3檔案下載到你的arm板上,
方法很多,你需要根據自己的情況來選擇。如ftp,nfs,串口等。 好,開始運行
chmod +wx sqlite
[root@www.bkjia.com]# ./sqlite3 zieckey.db
./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory
這裡是因為剛剛編譯時間編譯的是動態串連庫形式的,所有我們還的將庫檔案下載到ARM板上。
將 /usr/local/arm-linux/sqlite-arm-linux/lib 目錄下所有檔案下到ARM板上。 再次運行,
[root@www.bkjia.com]# ./sqlite3 zieckey.db
./sqlite3: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory
還是出錯,哦,我們沒有設定環境變數,
假設我們下在庫檔案在ARM板上的 /usr/qpe/lib/ 目錄下,這裡設定環境就像下面:
[root@www.bkjia.com]# export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH 好了這樣就可以運行了:
[root@www.bkjia.com]# ./sqlite3
SQLite version 3.3.8
Enter ".help" for instructions
sqlite>
看見
sqlite>
提示符號沒有?成功了。哈哈!!
打個“.help”來看看命令先:-)
sqlite>.help
好了。現在sqlite已經在arm-linux下跑了起來。如何,感覺很high吧。