由於最近開發版上的sqlite需要訪問伺服器上的mysql,就移植了下mysql-connector-c來訪問伺服器,也可以通過交叉編譯mysql的原始碼,不過貌似mysql不支援交叉編譯,查了下網上步驟比較繁雜
1,下載mysql-connector-c-6.0.2.tar.gz
http://dev.mysql.com/downloads/connector/c/
2,解壓進入目錄
3.ubuntu下安裝cmake: sudo apt-get install cmake
4.安裝交叉編譯器就不詳細說了(arm-linux-gcc -v 察看下)
5.設定編譯器
export CC=arm-linux-gcc CXX=arm-linux-g++
或者在CMakeLists.txt修改添加
SET(CMAKE_CXX_COMPILER "arm-linux-g++")
SET(CMAKE_C_COMPILER "arm-linux-gcc")
6.用cmke產生makefile
mkdir mypath
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=mypath (mypath為交叉編譯之後的安裝路徑)
7.開始編譯
make
可能在make過程中在編譯到95%的時候會報未定義到floor(),log(),pow()等數學函數,因為gcc編譯時間候要加-lm參數串連《math.h》
解決方案:
vim CMakeLists.txt ////在如下兩處添加-lm參數
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall
-lm")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -lm -fno-rtti -fno-exceptions")
如果在開始編譯時間include/my_global.h 中的rint()這個函數報錯可以將其函數體全部注釋也能編譯通過
make install
8.通過編譯好的庫為qt編譯驅動,由於通過驅動訪問資料庫效率比較低我們採用靜態編譯的方式將驅動編譯到Qt的庫中
./configure-prefix /usr/local/Trolltech/QtEmbedded-arm -opensource-confirm-license -release -shared -embedded arm -xplatformqws/linux-arm-g++
-depths 16,18,24 -fast -optimized-qmake -pch-qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype-little-endian -host-little-endian -no-qt3support -no-libtiff-no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-webkit-no-qvfb -no-phonon -no-nis
-no-opengl -no-cups -no-glib -no-xcursor-no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomakeexamples -nomake tools -nomake docs -qt-mouse-tslib
-qt-sql-mysql -I/usr/local/tslib/include -L/usr/local/tslib/lib
-I/usr/local/arm_mysql/include -L/usr/local/arm_mysql/lib
紅色部分為我為編譯mysql驅動到Qt庫中添加的編譯條件和依賴mysql標頭檔和庫(前面編譯安裝好mysql的目錄)
由於mysql驅動都編譯到Qt庫中了,移植到開發板上的過程和移植Qt一樣,最後還得將前面交叉編譯好了的mysql lib目錄中的libmysql.so.16拷貝到開飯版/lib中否則會提示找不到共用庫
註:開始我實在ubuntu12.04上編譯的總是報錯改了好久都沒改好改裝的庫都裝了,想到前面在fedora14上編譯QT沒啥出錯就又跑到fedora上去編譯了,果然一路順風,一個多小時後就編譯好了(虛擬機器上可能比較慢)