编译ARM平台的QtEmbedded 的MySQL插件和移植MySQL到ARM开发板
經過幾天的努力,終于交叉編譯出了arm平臺所需Qt/E的MySQL插件(驅動),其中順便把MySQL也移植到了mini2410的開發板上。
編譯器:arm-linux-gcc(4.3.2)
Pc平臺:redhat
由于mysql本身并不支持交叉編譯,所以編譯過程相對復雜,且各版本有所
不同,本文針對mysql-5.1.32。
1、準備工作
首先在/home/bjwlxy目錄下解壓mysql-5.1.32.tar.gz,得到mysql-5.1.32,進
入目錄運行如下命令:
#./configure --prefix=/usr/local/mysql
# make
然后將其改名為mysql-pc備用。(注意不要# make install)
2、Configure
再次解壓mysql-5.1.32.tar.gz,得到mysql-5.1.32,進入目錄,修改configure
文件
#vi configure
注釋以下代碼:
21948#if test "$cross_compiling" = yes; then
21949# { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
21950#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
21951#{ { $as_echo "$as_me:$LINENO: error: cannot run test programwhile
crosscompiling
21952#See \`config.log' for more details." >&5
21953#$as_echo "$as_me: error: cannot run test program while crosscompiling
21954#See \`config.log' for more details." >&2;}
21955# { (exit 1); exit 1; }; }; }
21956#else
22025#fi
30317# if test "$cross_compiling" = yes; then
30318# { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
30319#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
30320#{ { $as_echo "$as_me:$LINENO: error: cannot run test programwhile
crosscompiling
30321#See \`config.log' for more details." >&5
30322#$as_echo "$as_me: error: cannot run test program while crosscompiling
30323#See \`config.log' for more details." >&2;}
30324# { (exit 1); exit 1; }; }; }
30325#else
30408#fi
保存退出。
#./configure --host=arm-linux --prefix=/usr/local/mysql
如果出現錯誤
error:No curses/termcap library found
再次配置
#./configure--host=arm-linux-with-named-curses-libs=/usr/lib/libncurses.so.5--prefix=/usr/local/mysql
3、Make
#make
出現錯誤1
/usr/lib/libncurses.so.5:could not read symbols: Invalid operationead symbols: Invalidoperation
這個是因為libncurses.so.5運行平臺不是arm所致,這時,需要我們手動交叉編譯libncurses.so.5文件,方法和下面的類似:
1、下載ncurses-5.6.tar.gz安裝包,
#cdhome
解壓包
#tarzxvf ncurses-5.6.tar.gz
#cdncurses-5.6
配置
#./configure--host=arm-linux -prefix=/usr -with-shared -without-debug
#make
2、備份/usr/lib/里面的libncurses.so.5,libncurses.so.5.6
cp/usr/lib/libncurses.so.5 /usr/lib/libncurses.so.5.bak
cp/usr/lib/libncurses.so.5.6 /usr/lib/libncurses.so.5.6.bak
復制ncurses-5.6/lib目錄下交叉編譯過的libncurses.so.5,libncurses.so.5.6到/usr/lib/
#cplib/libncurses.so.5 /usr/lib/
#cplib/libncurses.so.5.6 /usr/lib/
接著
#cd/home/bjwlxy/mysql-5.1.32
繼續
#make
}
出現錯誤2
make[2]:Leaving directory `/home/zhaowg/mysql-pc/sql'
./gen_lex_hash> lex_hash.h-t
/bin/sh:./gen_lex_hash: cannot execute binary file
make[1]:*** [lex_hash.h] 錯誤 126
這是由于編譯的arm類型的程序不能在PC上運行造成的,于是前面做的
準備工作派上用場了:
#cp ../mysql-pc/sql/gen_lex_hash sql/
#make
錯誤3
sql_parse.cc:5432:21:operator '<' has no left operand
make[3]:*** [sql_parse.o] 錯誤 1
檢查 sql_parse.cc的5432行,發現宏變量STACK_DIRECTION沒有定義初
值,網上查找資料發現arm中定義STACK_DIRECTION為1,于是在文件開5432的上一行
加上
#visql/sql_parse.cc
#define STACK_DIRECTION 1
保存退出。
#make
完成
4、makeinstall
#make install
會停在
makeINSTALL_TO_DIR="/usr/local/mysql/mysql-test"install_test_files
make[4]:Entering directory `/home/zhaowg/mysql-pc/mysql-test'
一段時間,不要以為出錯了,耐心等一會!
到此,編譯arm平臺的mysql基本完成。
編譯arm平臺的QtEmbedded的mysql插件
進入Qt/E目錄
#cd $QTDIR/src/plugins/sqldrivers/mysql
#qmake "INCLUDEPATH+=/usr/local/mysql/include/mysql""LIBS+=-L/usr/local/mysql/lib/mysql -lmysqlclient_r"mysql.pro
#make
#makeinstall
#cd$QTDIR/plugins/sqldrivers/
#ls
如果出現libqsqlite.so,說明編譯成功。
移植MySQL到開發板
將/usr/local目錄下的mysql文件夾拷貝到開發板的/usr/local目錄下,并在環
境變量里面聲明。
#export PATH=”$PATH:/usr/local/mysql/bin”
6、開啟mysqld服務
首先將以下內容保存為/etc/my.conf
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
user=root
#Default to using old password format for compatibility with mysql 3.x
#clients (those using the mysqlclient10 compatibility package).
old_passwords=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
因為在/var/run目錄下沒有mysqld/mysqld.pid,手工建立:
#mkdir /var/run/mysqld
#touch /var/run/mysqld/mysqld.pid
開啟服務:
#mysql_install_db –u root
#mysqld_safe –socket=/tmp/mysql.sock &
至此,mysql運行在arm 開發板上了
以下是我做的在arm上的移植:
因為登陸不上!
?mysqld_safe --user=root --skip-grant-tables --skip-networking &
總結
以上是生活随笔為你收集整理的编译ARM平台的QtEmbedded 的MySQL插件和移植MySQL到ARM开发板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔的VT-x技术是什么?
- 下一篇: linux通过c语言编程访问远程mysq