2015-05-26 81 views
0

我正在開發一個與外部ODBC數據庫連接的應用程序。 當我在Qt上運行它時,一切正常,但是當我嘗試打開獨立時,它總是在m_db-> open()上崩潰。打開ODBC db時Qt應用程序崩潰

當應用程序崩潰,得來這樣的錯誤:

Segmentation fault (core dumped) 

下面是代碼:

m_db = new QSqlDatabase(QSqlDatabase::addDatabase("QODBC","edb")); 
m_db->setDatabaseName(m_line); 
m_db->open(); // <-// app crash here! 

其中:

m_line = "Driver=/opt/sqlanywhere12/lib64/libdbodbc12.so;CommLinks=tcpip(Host=ip;port=port);ServerName=db;DatabaseName=db;Uid=uid;Pwd=psswd;" 

任何人有一些線索?

我正在運行Ubuntu 14.04 64bits。 謝謝,

編輯

好了,經過一些更多的測試,似乎它停止崩潰,如果我請從m_line可變驅動程序配置,但很明顯,它停止工作...

EDIT2

從Qt創建者配置自定義運行後,它說反彙編器上的轉折點是0x7ffff6a777b9。這是什麼意思?

+0

由於'm_db'是一個指針,它的值是什麼?它指向一個有效的實例嗎?爲什麼一個指針?爲什麼不使用對象實例(而不是指針)編寫簡單的測試應用程序,以驗證簡單應用程序的工作原理? – PaulMcKenzie

+0

是的,這是一個有效的指針。我已經添加了一段代碼。 – albertTaberner

回答

0

好,曾經的最愚蠢的陷阱...... 我忘了上執行添加LD_LIBRARY_PATH。

1

那就是不是如何使用QSqlDatabaseQSqlDatabase實例是通過連接名稱檢索內部連接的句柄,它們不控制連接的生存期。 所以應該在stack聲明:

m_db = QSqlDatabase::addDatabase("QODBC","edb")); 
m_db.setDatabaseName(m_line);  
m_db.open(); 
+0

感謝您的評論。不幸的是,在應用您提出的建議更改後,該程序仍會在同一時間崩潰。 此外,由於內部管理,我需要一個指針。 我認爲問題應該是,當Qt運行應用程序時,它會添加一些配置參數,我不會(比如添加一些包含路徑)。根據我上次更新的內容,問題在於任何庫在Qt外部啓動時崩潰。 – albertTaberner

+0

@Atron你的調試器說什麼? – cmannett85

+0

其實沒什麼。當在Qt Creator上啓動時(甚至在發佈模式下)時,編程工作。當我嘗試在終端上啓動它或點擊可執行文件時,問題就出現了。 再次感謝@ cmannett85! – albertTaberner

相關問題