在Mac下成功編譯了MySql和Oracle的資料庫外掛程式驅動,但遺憾的是在程式中無論如何也載入不了這兩個驅動,也無法串連資料庫。在環境變數中設定QT_DEBUG_PLUGINS=1, 再啟動程式後Qt會報告一些載入外掛程式的調試資訊,從中可以看出是外掛程式不相容引起的,也就是文檔中所說的Build Key的問題,在文檔中有提到可能需要清除外掛程式緩衝(Plugin cache),應該是在一個QSettings定義的檔案中,但我沒找到。無奈下將QtSDK刪除重新安裝一遍,又從頭開始,最後終於成功。下面記錄詳細的過程,供日後參考。
1. 首先安裝QtSDK 1.2, 安裝在 ~/QtSDK目錄下,安裝的時候要選擇安裝4.8.0的原始碼,否則後面無法編譯plugin;
2. 下載MySql和Oracle的資料庫連接的動態庫;可從官網下載,注意選擇與你的系統合適的版本,我這裡是Max OSX 10.7.3 64bit;MySql下載的是mysql-connector-c-6.0.2-osx10.5-x86-64bit.tar.gz, oracle下需要的是instantclient basic包和instantclient SDK包。
3. 將下載的資料庫文檔解壓縮到本地目錄下,記錄下檔案目錄;MySql解壓在~/bin/mysql目錄下,下面會有include和lib子目錄;oracle的兩個包解壓到~/bin/oracle目錄下,目錄下有庫檔案和sdk目錄;
4.準備工作完了後,開始編譯產生Qt庫;首先執行命令(後面3行是一個命令,因太長了分行顯示)
- cd ~/QtSDK/QtSources/4.8.0
- ./configure -opensource -prefix /Users/lutx/QtSDK/Desktop/Qt/4.8.0/gcc -plugin-sql-mysql -plugin-sql-oci
- -plugin-sql-odbc -plugin-sql-sqllite -I/Users/lutx/bin/mysql/include -I/Users/lutx/bin/oracle/sdk/include
- -L/Users/lutx/bin/mysql/lib -L/Users/lutx/bin/oracle
上面的命令中,prefix是定義編譯後的安裝目錄,預設是安裝到/usr/local/Trolltech/Qt-4.8.0目錄下,我這裡給定義安裝到 QtSDK的目錄下,這樣可以避免後面在QtCreator中配置版本,或者利用install_name_tools來修改動態庫名稱等操作。經過一段 時間(幾分鐘)等待後,產生了整個來源目錄下的makefile檔案。系統應該顯示
- Qt is now configured for building. Just run 'make'.
- Once everything is built, you must run 'make install'.
- Qt will be installed into /Users/[xxxx]/QtSDK/Desktop/Qt/4.8.0/gcc
-
- To reconfigure, run 'make confclean' and 'configure'.
上面的[xxxx]應該是你的系統登入使用者名稱,下同。
5.下面開始編譯過程,應該很簡單,直接在剛才的目錄下繼續執行make命令即可,www.bkjia.com 但是我這裡在編譯到QtWebkit這個庫的時候會有錯誤,因此後面將跳過這個庫繼續編譯後面的庫。出現的錯誤是:
- fileapi/FileReaderLoader.cpp: In member function ‘void WebCore::FileReaderLoader::convertToDataURL()’:
- fileapi/FileReaderLoader.cpp:307: error: ‘base64Encode’ was not declared in this scope
- make[3]: *** [.obj/debug-static/FileReaderLoader.o] Error 1
- make[2]: *** [debug-all] Error 2
- make[1]: *** [sub-WebCore-make_default-ordered] Error 2
這裡也不知道是麼原因,沒搞明白。
5.通過Makefile檔案知道,在Webkit後面還有scripttools,plugins(這個是主要目的), 後面用命令逐個編譯每個庫。
- cd src/scripttools;make;cd ../plugins;make;cd ../imports;make;cd ../tools;make;cd ../translations;make;cd ../..
- make install
因為不是必需的,最後沒有編譯examples和demos兩個目錄。
如此編譯已經成功,另外在程式運行時需要將mysql的lib目錄和oracle的lib目錄加到環境變數DYLD_LIBRARY_PATH中,否則還是無法載入資料庫外掛程式驅動。