由于最近开发版上的sqlite需要访问服务器上的mysql,就移植了下mysql-connector-c来访问服务器,也可以通过交叉编译mysql的源代码,不过貌似mysql不支持交叉编译,查了下网上步骤比较繁杂
1,下载mysql-connector-c-6.0.2.tar.gz
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上去编译了,果然一路顺风,一个多小时后就编译好了(虚拟机上可能比较慢)