【问题标题】:Compiling InterBase support in Qt在 Qt 中编译 InterBase 支持
【发布时间】:2011-11-07 15:33:50
【问题描述】:

我已按照http://doc.qt.nokia.com/stable/sql-driver.html#qibase 上的说明将 Interbase 支持编译到 Qt 中,并确保我所有的库都在正确的位置。 qmake 运行成功,但是当我运行nmake 时,我在qsql_ibase.cpp 中得到了一系列未定义的引用错误。如果我在 Qt Creator 中打开 .pro 并将鼠标悬停在引发未定义引用错误的函数之一上并跟随符号 (F2),它会将我带到声明它的 ibase.h 文件。是否因为没有函数定义而抛出未定义的引用错误?如果是这样,为什么它没有给我关于缺少库的任何错误?

输出示例:

创建库文件:debug\libqsqlibased4.a debug/qsql_ibase.o:在函数getIBaseError': C:\QtSDK\QtSources\4.7.4\src\plugins\sqldrivers\ibase/../../../sql/drivers/ibase /qsql_ibase.cpp:80: undefined reference toisc_sqlcode' C:\QtSDK\QtSources\4.7.4\src\plugins\sqldrivers\ibase/../../../sql/drivers/ibase /qsql_ibase.cpp:85: 未定义对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 toisc_dsql_free_st 的引用 满足' 调试/qsql_ibase.o:C:\QtSDK\QtSources\4.7.4\src\plugins\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 toisc_put_segment'

这会继续出现更多错误,所有未定义的引用。

【问题讨论】:

  • 请发布一个未定义参考错误的示例;这将准确地缩小未解决的范围。

标签: qt plugins interbase


【解决方案1】:

真的听起来像是您在上面链接到的页面的“疑难解答”部分中提到的第一个问题:

您应该始终使用已编译的客户端库 与您用于项目的编译器相同。如果你不能得到 自己编译客户端库的源代码分发,您 必须确保预编译的库与您的兼容 编译器,否则你会得到很多“未定义的符号”错误。 一些编译器具有转换库的工具,例如Borland 运送 工具 COFF2OMF.EXE 转换已生成的库 Microsoft Visual C++。

您使用哪个编译器来编译 Qt,您从哪里获得 Interbase 库?您还需要确保可以在链接时找到这些库。如果您查看编译器的输出,它应该会显示它正在搜索的所有链接目录(除了任何全局定义的,如 Windows 中的 PATH。)如果列出了包含您的 Interbase 库的文件夹,它可能是编译器版本不匹配。

【讨论】:

  • 我在 windows 中使用 nmake。我使用的库是 Interbase 安装附带的库,它们可以在链接时找到。当我使用用 COFF2OMF 工具制作的库时,这是我从 nmake 得到的:c:\QtSDK\Desktop\Qt\4.7.4\mingw\lib/gds32_ms.lib: file not recognized: File form at not recognized collect2: ld returned 1 exit status NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x1' Stop. NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2' Stop.
  • 我对 COFF2OMF 工具一无所知,抱歉。我不知道是否可以选择,但您可以将您的工具链从 mingw 切换到 Visual Studio 编译器吗? Mingw 是 Windows 上的继子。我并不是说它更糟,但它的支持要少得多。我们不久前切换了,并且在使用第三方库时遇到的问题大大少了。
【解决方案2】:

很抱歉提出这么老的主题,但我找到了解决方案并想与它分享。问题是宏 ISC_EXPORT 由于条件编译定义而未在 Interbase 的 SDK 中定义。在此处查看详细信息 - Howto build Interbase plugin for Qt by MinGW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2016-11-05
    • 1970-01-01
    相关资源
    最近更新 更多