arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件
最近需要將一個程序移植到arm平臺上,程序調(diào)用了MySQL數(shù)據(jù)庫,所以就牽扯到將MySQL數(shù)據(jù)庫移植到ARM平臺上面,所以在網(wǎng)上大量查閱資料。在baidu文庫發(fā)現(xiàn)了一篇文檔,是wlzxlc上傳的文檔名稱為:《編譯ARM平臺的QtEmbedded的MySQL插件和移植MySQL》。下面說明里面介紹到:ARM平臺下的QtEmbedded所需mysql插件,及MySQL的移植。我的整個移植過程參考了這篇文檔,但是遇到了很多的問題,所以又上網(wǎng)搜尋其它資料。現(xiàn)在我已經(jīng)移植成功,回頭看這篇文檔,就發(fā)現(xiàn)里面有很多疏漏甚至是錯誤。這些東西如果不詳細(xì)注明出來,更多的新手絕對還會重蹈我的覆轍,所以在這里將mysql的arm+linux移植經(jīng)驗貼出來,希望對新手以及做相關(guān)方面工作的人能有幫助。所有在《編譯ARM平臺的QtEmbedded的MySQL插件和移植MySQL》這篇文檔中的錯誤以及注意事項,我也會一一列出,在下面我將其稱為“原文”。
編譯器:arm-linux-gcc(4.3.2)
Pc平臺:ubuntu
在移植之前有必要先說明一下幾個問題:
1.MySQL還沒有支持交叉編譯的版本出現(xiàn).但為了讓編譯繼續(xù),必須在configure腳本中將多處不支持交叉編譯的命令全都注釋掉,才能讓configure順利通過。
2.交叉編譯過程中需要用到ncurses-5.6下的libncurses.a庫,而這個庫文件也必須是arm平臺下的,所以我們在交叉編譯MySQL時需要先自己手動交叉編譯libncurses.a的庫。(原文是說需要libncurses.so.5文件,這里我查閱很多資料發(fā)現(xiàn),應(yīng)該是libncurses.a)
3.編譯過程中需要運行g(shù)en_lex_hash,但這個命令是arm格式的在pc機上運行不起來,解決方法是要編譯好一個在pc上運行的mysql,從相應(yīng)的目錄下拷出gen_lex_hash覆蓋相應(yīng)目錄下的這個arm格式的gen_lex_hash(這里要注意的是這個pc機上運行的mysql編譯路徑要和現(xiàn)在這個arm上運行的mysql路徑完全相同,否則后面同樣的問題中執(zhí)行命令時涉及到路徑問題,解決辦法是先把現(xiàn)在編譯的arm平臺的mysql目錄改為其他名稱,再解一個mysql包改名為mysql將其編譯成pc上運行的版本,只要簡單的用./configure?|make就行了,再把pc版本的mysql改為mysql-pc,將原來的那個名稱改回mysql即可(貌似有點暈乎)。
下面就是移植過程,原文使用了出錯后講解的思路,我這里就直接寫步驟了,相當(dāng)于說明書,方便新手操作。
(1)準(zhǔn)備工作
②下載ncurses-5.6的tar包
③安裝g++編譯器 #apt-get?install?g++
④準(zhǔn)備編譯前請先確定已安裝交叉編譯器arm-linux-gcc(4.3.2),并已經(jīng)在終端設(shè)置好環(huán)境變量,做好這些就可以開始移植工作了。
(2)編譯MySQL??PC版本
①先下載壓縮包到本地,并解壓mysql-5.1.51.tar.gz到/opt/lib/mysql-5.1.51: :/opt/lib#tar?zxvf?mysql-5.1.51.tar.gz
②進入解壓得到的源碼目錄中::/opt/lib#cd?mysql-5.1.51③運行configure,生成makefile::/opt/lib/mysql-5.1.51#./configure?-prefix=/usr/local/mysql如果出現(xiàn)以下提示信息(沒有出錯就不用管):
checking?for?termcap?functions?library…?configure:?error:?No?curses/?termcap?library?found
那么就安裝libncurses5-dev進行解決: :/opt/lib/mysql-5.1.51#apt-get?install?libncurses5-dev
④安裝完成之后,再次運行./configure?–prefix=/usr/local/mysql,一切正常.
⑤直接開始運行make編譯源代碼: :/opt/lib/mysql-5.1.51#make
⑥Make完成后,將這個文件夾改名為mysql-5.1.51-pc留作備用。
(3)交叉編譯MySQL?-ARM版本
根據(jù)最前面提到的問題,要交叉編譯MySQL?-ARM版本,首先我們得先得到一個交叉編譯過的libncurses.a的庫,所以為了方便,我們先做這一步。
①交叉編譯ncurses-5.6.tar.gz
i.先下載壓縮包到本地,并解壓ncurses-5.6.tar.gz到/opt/lib/ncurses-5.6: :/opt/lib#tar?zxvf?ncurses-5.6.tar.gz
ii.進入解壓得到的源碼目錄中::/opt/lib#cd?ncurses-5.6
iii.運行configure,生成makefile:(我這里將ncurse安裝到了/usr/local/ncurse) :/opt/lib/ncurses-5.6#./configure–host=arm-linux?-prefix=/usr/local/ncurse–enable-static
v.直接開始運行make編譯源代碼 :/opt/lib/ncurses-5.6#make
iv.直接開始安裝: :/opt/lib/ncurses-5.6#make?install
安裝完成就可以拿來備用了。原文還牽扯到要備份、還要復(fù)制等等,其實完全沒有必要,在編譯MySQL的時候只要指到具體路徑就可以了,根本不需要這么麻煩……..
②重新解壓mysql-5.1.51.tar.gz到/opt/lib/mysql-5.1.51: :/opt/lib#tar?zxvf?mysql-5.1.51.tar.gz
③進入解壓得到的源碼目錄中::/opt/lib#cd?mysql-5.1.51
④修改configure,注釋掉不支持交叉編譯的部分 :/opt/lib#gedit?configure 找到所有如下語句:
if test "$cross_compiling" = yes; then
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }; }
else
修改成 if test "$cross_compiling" = yes; then
echo “skip corss_compiling test”;
#{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
# $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
#{ { $as_echo "$as_me:$LINENO: error: cannot run test program while
# cross compiling See \`config.log' for more details." >&5
#$as_echo "$as_me: error: cannot run test program while cross compiling #See \`config.log' for more details." >&2;}
#{ (exit 1); exit 1; }; }; }
Else?保存推出 原文那種注釋方法,還需要找到離這段代碼段比較遠的一處#fi,這個本來就容易出問題,而且應(yīng)該有將近4段類似代碼,而原文只說明了2段,這樣肯定是編譯不過去的。
⑤交叉編譯MySQL
有了這些準(zhǔn)備工作,這個時候就可以交叉編譯MySQL了。
Ⅰ.配置configure ./configure?--host=arm-linux?–-enable-static--with-named-curses-libs=/usr/local/ncurses/lib/libncurses.a?--prefix=/usr/local/mysql--without-debug?--without-docs?--without-man?--without-bench?--with-charset=gb2312--with-extra-charsets=ascii,latin1,utf8 這里請注意我標(biāo)出來的橙色部分,首先是使用libncurses.a庫,在交叉編譯MySQL-ARM版本的第一步,交叉編譯ncurses-5.6時,我的ncurse安裝目錄就是/usr/local/ncurses/,這里前面你要是修改了安裝目錄,這里就需要注意一定要指向你的安裝目錄 第二就是我將交叉編譯的MySQL也安裝到了/usr/local/mysql,這個是因為我在編譯PC版本的MySQL時只是使用了make,并沒有make?install。如果你也需要使用ubuntu下面的MySQL,并且當(dāng)時使用了make?install,這里就需要注意目錄問題。 Ⅱ.直接開始運行make編譯源代碼: :/opt/lib/mysql-5.1.51#make 出現(xiàn)錯誤:
make[2]:?Leaving?directory?`/opt/mysql-5.5.3-m3/sql'
./gen_lex_hash?>?lex_hash.h-t
/bin/sh:?./gen_lex_hash:?cannot?execute?binary?file
這個時候就需要將剛才我們編譯好的PC版本的$MYSQL\sql\目錄下面的gen_lex_hash,然后cp到現(xiàn)在交叉編譯時對應(yīng)的$MYSQL\sql\目錄覆蓋即可。
這時注意:覆蓋完成后不要急于make,這時輸入如下命令: :/opt/lib/mysql-5.1.51#touch?–m?sql/gen_lex_hash
然后再執(zhí)行make
:/opt/lib/mysql-5.1.51#make
上面的命令是改變gen_lex_hash的最后修改時間,這樣做的目的是告訴編譯器gen_lex_hash已經(jīng)是最新的了,不要重新生成它,否則編譯器檢查gen_lex_hash和它的依賴文件的最后修改時間會發(fā)現(xiàn)gen_lex_hash比它的依賴文件更舊,就會重新交叉編譯生成它,這樣不管我們做幾次覆蓋的工作錯誤都還會再現(xiàn).
這個是原文沒有提及的,我在這個問題就耗費了相當(dāng)長的時間,如果不輸入這條命令,就算你make?clean后再make,也一樣還是會出錯,原因就是上面所講的…..
出現(xiàn)錯誤:
sql_parse.cc:5432:21:?operator?'
解決辦法:
這是由于宏變量STACK_DIRECTION沒有定義初值,網(wǎng)上查找資料發(fā)現(xiàn)arm中定義STACK_DIRECTION為1,所以找到sql_parse.cc文件,將第5432行的前面一行加入#defineSTACK_DIRECTION1
Ⅲ.這時就應(yīng)該能夠正常編譯,編譯結(jié)束后就可以執(zhí)行install :/opt/lib/mysql-5.1.51#make?install 至此,編譯arm平臺的MySQL基本完成 (4)編譯mysql插件:
你可以在QT的官方網(wǎng)站下載最新的qt-sdk-linux-x86-opensource-2010.05.1.bin,然后下載執(zhí)行安裝,我安裝的位置是/opt/。
進入相應(yīng)的位置找到mysql.pro文件
:?#cd?/opt/qtsdk-2010.05/qt/src/plugins/sqldrivers/mysql
修改mysql.pro文件,添加如下兩行:
INCLUDEPATH??+=?/usr/local/mysql/include/mysql
LIBS?????????+=?-L/usr/local/mysql/lib/mysql–lmysqlclient_r
qmake?mysql.pro
make
make?install
編譯完成,在該路徑下就會生成一個libqsqlmysql.so文件,將該文件復(fù)制到/opt/qtsdk-2010.05/qt/plugins/sqldrivers目錄下就可以了 最后同樣感謝原文,也給我提供了很大程度的指導(dǎo)。
注:在找QT在ARM中連接mysql的插件,這是一份比較好的文檔,不過竟然搜不出作者的信息。 只有百度大娘的文庫中有。
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序设计教程赵乘,《C语言程序设计
- 下一篇: php绘制时钟刻度,怎么用canvas写