Ubuntu系統中Qt連Postgresql的問題解決

昨天遇到一個很蛋疼的問題, 折騰了一天都沒解決, 今天突然間就解決了, 暈.


        問題是這樣的: 在Windows系統下, Qt連接數據庫Postgresql是需要自己去Qt源碼裏手動編譯Postgresql驅動的, 然後把生成的動態連接庫放到Qt的安裝目錄裏面的插件目錄plugins中. 當我跑到Ubuntu系統下去做時, 發現在我的qt4.8.6的目錄/opt/qt4.8.6/plugins/sqldrivers下是有libqsqlite.so和libqsqlpsql.so的, 也就是說qt已經自帶了Postgresql的驅動了. 然後我直接編譯完項目, 運行時居然提示沒有找到數據庫驅動, 而且不但psql的驅動找不到, 連基本的sqlite都沒找到.


我這就很鬱悶了, 明明驅動就在那裏, 爲什麼就說沒有呢?


我係統裏面還裝了qt5.2.1, 我便試着在5.2.1上面重新編譯運行, 發現只找到了sqlite的驅動, 沒有找到psql的驅動. 我跑去它的plugins/sqldrivers目錄下, 發現確實只有libsqlite.so.


那麼, 問題來了, qt5.2.1找到了sqlite的驅動, 爲什麼qt4.8.6就沒有找到了?


我一直認爲是編譯的時候鏈接的某路徑有問題, 但一直不得其解.


直到今天, 我重寫開啓qtcreator, 直接運行程序, 發現居然連接上數據庫了! 然後我重寫編譯, 又說沒有發現數據庫驅動!這是爲什麼呢? 後來又折騰了一會才發現, 我是直接在qt4.8.6套件下編譯, 然後在qt5.2.1套件下執行, 然後就鏈接成功了. 然後我又試着在終端直接運行qt4.8.6構建的執行文件, 結果也鏈接成功了.


原來是運行時的動態鏈接庫問題, 而不是編譯的問題!


原本在Qt的Run Environment中, qt4.8.6的LD_LIBRARY_PATH自動設置爲/opt/qt4.8.6/lib, 改爲/opt/qt4.8.6就好了. 需要的動態庫其實是在/opt/qt4.8.6/plugins/sqldrivers裏面.


而在qt5.2.1的運行環境能運行是因爲, qt5.2.1的LD_LIBRARY_PATH自動設置爲/usr/lib/x86_64-linux-gnu, 在這個目錄下有另外一個qt4的目錄, 在它的目錄下面有那個libsqlite.so.


好傻的問題, 我居然這麼久才發現.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章