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.
好傻的問題, 我居然這麼久才發現.
------------------------------------華麗麗的分割線------------------------------------
CentOS 6.3環境下yum安裝PostgreSQL 9.3
PostgreSQL緩衝詳述
Windows平台編譯 PostgreSQL
Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝
Ubuntu上的phppgAdmin安裝及配置
CentOS平台下安裝PostgreSQL9.3
PostgreSQL配置Streaming Replication叢集
如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin
------------------------------------華麗麗的分割線------------------------------------
PostgreSQL 的詳細介紹:請點這裡
PostgreSQL 的:請點這裡
本文永久更新連結地址: