2011-11-07 45 views
0

我已按照http://doc.qt.nokia.com/stable/sql-driver.html#qibase的指示編譯Interbase支持到Qt中,並確保我的所有庫都位於正確的位置。 qmake成功運行,但是當我運行nmake時,我在qsql_ibase.cpp中遇到了一系列未定義的引用錯誤。如果我在Qt Creator中打開.pro文件並懸停在拋出未定義引用錯誤的函數之一上,並按照符號(F2),它會將我帶到它聲明的ibase.h文件。它是否拋出未定義的引用錯誤,因爲沒有函數定義?如果是這樣的話,爲什麼它不給我任何有關缺失庫的錯誤?在Qt中編譯InterBase支持

輸出例如:

創建的庫文件:調試\ libqsqlibased4.a 調試/ qsql_ibase.o:在功能getIBaseError': C:\QtSDK\QtSources\4.7.4\src\plugins\sqldrivers\ibase/../../../sql/drivers/ibase /qsql_ibase.cpp:80: undefined reference to isc_sqlcode」 C:\ QTSDK \ QtSources \ 4.7.4 \ SRC \插件\ sqldrivers \ ibase /../../../sql/drivers/ibase /qsql_ibase.cpp:85:undefined參考isc_interprete' debug/qsql_ibase.o:C:\QtSDK\QtSources\4.7.4\src\plugins\sqldrivers\ibase/../../. ./sql/drivers/ibase/qsql_ibase.cpp:406: undefined reference to isc_dsql_free_st atement' debug/qsql_ibase.o:C:\ QtSDK \ QtSources \ 4.7。 4 \型鋼\插件\ sqldrivers \ IBASE /../../。 ./sql/drivers/ibase/qsql_ibase.cpp:421:未定義的引用isc_create_blob2 ' debug/qsql_ibase.o:C:\QtSDK\QtSources\4.7.4\src\plugins\sqldrivers\ibase/../../. ./sql/drivers/ibase/qsql_ibase.cpp:427: undefined reference to isc_put_segment」

這將繼續有更多的錯誤,所有未定義的引用。

+0

請張貼一個未定義的參考錯誤的例子;這將縮小*完全*未解決的問題。 –

+0

添加了錯誤示例 – TheJubilex

回答

0

真的聽起來像頁面到你上面的鏈接「故障排除」一節中提到的第一個問題:

你應該總是使用已編譯 相同的編譯器的客戶端庫正如你正在用於你的項目一樣。如果您無法自行編譯客戶端庫,則必須確保預編譯的庫與您的 編譯器兼容,否則您將收到大量「未定義符號」錯誤。一些編譯器有工具來轉換庫,例如Borland發佈了 工具COFF2OMF.EXE來轉換已使用 Microsoft Visual C++生成的庫。

您使用哪種編譯器來編譯Qt,以及哪裏獲得了Interbase庫?您還需要確保鏈接時可以找到這些庫。如果您查看編譯器的輸出,它應該向您顯示它正在搜索的所有鏈接目錄(除了任何全局定義的目錄,例如Windows中的PATH)。如果列出了包含Interbase庫的文件夾,則很可能編譯器版本不匹配。

+0

我正在使用Windows的nmake。我使用的庫是Interbase安裝的庫,可以在鏈接時找到它們。 當我使用COFF2OMF工具製作的庫時,這是我從nmake獲得的: 'c:\ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ lib/gds32_ms。lib:文件無法識別:文件格式爲 at not recognized collect2:ld返回1退出狀態 NMAKE:致命錯誤U1077:'C:\ WINDOWS \ system32 \ cmd.exe':返回碼'0x1' 停止。 NMAKE:致命錯誤U1077:'C:\ WINDOWS \ system32 \ cmd.exe':返回碼'0x2' Stop.' – TheJubilex

+0

我對COFF2OMF工具一無所知,抱歉。我不知道是否是一個選項,但是可以將工具鏈從mingw切換到Visual Studio編譯器嗎? Mingw在Windows上非常成功,我並不是說它更糟糕,但它的支持更少。我們換了一段時間,而且第三方庫的問題已經少了很多。 –

0

對不起,提出這麼古老的主題,但我找到了解決方案,並希望與它分享。問題是,由於條件編譯定義,宏0123'沒有在Interbase的SDK中定義。在這裏看到的細節 - Howto build Interbase plugin for Qt by MinGW