[本文轉載來源為:http://blog.chinaunix.net/u/16292/showart_149594.html]
sqlite-3.3.6編譯安裝與交叉編譯
作者: zieckey@yahoo.com.cn
下文介紹的內容都是基於 Linux RedHat 9.0 平台的。
一、PC機編譯安裝
請閱讀在安裝包裡的 INSTALL 文件。或者使用PEAR installer with "pear install sqlite"。SQLite已經內置了,你不需要安裝任何附加的軟件(additional software)。
Windows users可以下載SQLite擴展DLL(php_sqlite.dl)。
這裡簡單介紹一下:
假設你得到的是源代碼sqlite-3.3.6.tar.gz,這裡將告訴你怎麼編譯它。
解壓sqlite-3.3.6.tar.gz 到 /home目錄下
For example:
tar zxvf sqlite-3.3.6.tar.gz -C /home
cd /home
mkdir sqlite-ix86-linux
cd /home/sqlite-ix86-linux/
../sqlite-3.3.6/configure --prefix=/home/sqlite-ix86-linux/
編譯並安裝,然後生成幫助文檔
make && make install && make doc
如果出現下列錯誤
../sqlite-3.3.6/src/tclsqlite.c: In function `DbUpdateHandler':
../sqlite-3.3.6/src/tclsqlite.c:333: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast
../sqlite-3.3.6/src/tclsqlite.c: In function `tclSqlFunc':
../sqlite-3.3.6/src/tclsqlite.c:419: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type
這個都是tcl相關的錯誤,可以先安裝ActiveTcl以解決.假如你不需要tcl支持,那麼這個錯誤可以這樣避免:
cd /home/sqlite-ix86-linux/
../sqlite-3.3.6/configure --disable-tcl --prefix=/home/sqlite-ix86-linux/
編譯並安裝,然後生成幫助文檔
make && make install && make doc
不出意外,將不會出現錯誤,那麼
庫文件已經生成在 /home/sqlite-ix86-linux/lib 目錄下
可執行文件sqlite3已經生成在 /home/sqlite-ix86-linux/bin 目錄下
下面創建一個新的數據庫文件名叫"zieckey.db" (當然你可以使用不同的名字) 來測試數據庫.
直接輸入: /home/sqlite-ix86-linux/bin/sqlite3 test.db
如果出現下面字樣表明編譯安裝已經成功了.
SQLite version 3.3.6
Enter ".help" for instructions
sqlite>
二、交叉編譯sqlite.3.3.6.tar.gz庫文件
tar zxvf sqlite-3.3.6.tar.gz -C /home (這一步前面已經有了,為了完整性,這裡還是寫出來)
mkdir /home/sqlite-arm-linux
設置交叉編譯環境
export PATH=/usr/local/arm-linux/bin:$PATH
cd /home/sqlite-arm-linux/
../sqlite-3.3.6/configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
這步出現錯誤而沒有生成Makefile
configure: error: unable to find a compiler for building build tools
前面檢查arm-linux-gcc都通過了,怎麼還說沒有找到編譯器呢?花了點時間看configure的腳本,太複雜了,又結合configure.ac看了一下。原來是要設置config_TARGET_CC和config_BUILD_CC兩個環境變量。config_TARGET_CC是交叉編譯器,config_BUILD_CC是主機編譯器。重來:
export config_BUILD_CC=gcc
export config_TARGET_CC=arm-linux-gcc
../sqlite-3.3.6/configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
又出現如下錯誤
checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling
說readline.h的錯,找到readline.h在/usr/include/readline/readline.h目錄,我想這樣解決
ln -s /usr/include/readline/readline.h /usr/include/readline.h
但還是不行
../sqlite-3.3.6/configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
還是出現如下同樣的錯誤
checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling
上面說是要檢查交叉編譯環境,我可以肯定我的交叉編譯環境是正確的,
所以我決定欺騙configure,我是這樣做的
cd /home/sqlite-3.3.6
將該目錄下的 configure 文件的部分內容修改下(這裡是根據 test "$cross_compiling" = yes && 找到的 ),
這樣可以讓configure不去檢查你的交叉編譯環境。
20420行 { (exit 1); exit 1; }; }改為 { (echo 1); echo 1; }; }
20446行 { (exit 1); exit 1; }; }改為 { (echo 1); echo 1; }; }
在回去重新配置下:
cd /home/sqlite-arm-linux/
../sqlite-3.3.6/configure --disable-tcl --prefix=/home/sqlite-arm-linux/ --host=arm-linux
中間打印信息出現如下錯誤信息,
checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling
但是還是生成了Makefile文件一個libtool腳本,這些將在make時用到.
注意:
如果Makefile文件中有如下語句
BCC = arm-linux-gcc -g -O2
請將其改掉,改成:
BCC = gcc -g -O2
編譯並安裝
make && make install
這裡如果不出意外,將不會出現錯誤,那麼
庫文件已經生成在 /home/sqlite-ix86-linux/lib 目錄下
好了,就到這裡。
沒有留言:
張貼留言