qt:对“mysql_something@nr”的未定义引用

Posted

技术标签:

【中文标题】qt:对“mysql_something@nr”的未定义引用【英文标题】:qt: undefined reference to 'mysql_something@nr' 【发布时间】:2011-01-25 18:24:10 【问题描述】:

我现在真的被卡住了,每次我尝试编译我的 c++ 程序时,我都会得到这样的输出:

release/dialog.o:dialog.cpp:(.text+0x9e): undefined reference to `mysql_init@4'
release/dialog.o:dialog.cpp:(.text+0xe1): undefined reference to `mysql_real_connect@32'

浏览一整天寻找解决方法、教程等等,阅读教程,卸载 mingw、mysql 服务器、qt 并重新安装所有内容。我再次删除了 qt 并从源代码构建它...使用 0.3 mingw-utils reimp.exe 和 dlltools.exe 等转换了 libmysql.dll,没有任何帮助。

在使用 QT(只是 notepad++ 和 mingw)之前,我也收到了链接器警告,告诉我一些关于 stdcall-fixup-disable 的信息,但程序已编译并运行。

稍后我会重新安装所有我认为的东西,在我什至不知道我从源代码构建 qt 之前,当前的设置并不比其他安装更好。 是否有任何简单(正常、简单)的方法可以让 Qt、MinGW、C++、MySQL5.5 协同工作?

edit2:我现在更正了代码,我让它工作了,这是一些最小的代码 sn-p 开始:

#include <QtCore/QCoreApplication>
#include <QMYSQLDriver>
#include <qsqldatabase.h>
#include <QtSql>

int main(int argc, char *argv[])

    QCoreApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    // insert other connection options here

    if(!db.open())
        // dp not open, add some debug text and stuff, exit or retry
    

    //db should be open at this place, add code here

    return app.exec();

【问题讨论】:

作为提示,您可以在 Google 上搜索此错误消息,删除您的特定关键字,输入查询:undefined reference to mysql_init 好的,我想我现在会接受一个答案,因为我的问题现在不再是未链接的库,而是运行时错误 【参考方案1】:

听起来您需要将 mysql 库添加到构建过程中。如果你使用的是 Qt 的 qmake 系统,类似于:

LIBS += -L/wherever/the/mysql/lib/is -lmysql

在项目的 .pro 文件中。

【讨论】:

这有帮助,我的程序现在编译了。但问题继续=/ mysql_init(my);工作正常,但它在 mysql_real_connect() 上崩溃;我用我拥有的一点点代码编辑我的帖子【参考方案2】:

Qt 的二进制发行版不包含内置的 MySQL 插件。你必须添加它manualy 您还应该在 .pro 文件中添加 QT += sql

【讨论】:

应该注意,如果你走这条路,你需要使用与数据库无关的 QtSQL API。您将无法使用mysql_init()。然而,使用 QtSQL 是一个不错的选择。 mysql 支持通常作为插件提供,因此不应该产生编译时间而是运行时错误。 我按照本教程中的步骤:doc.qt.nokia.com/4.7/… 卡住了,一切似乎都正常,但库不会显示在指定目录中 您能提供更多信息吗?如果它不起作用,你必须做错事。 我发现了我的错误,因为我在 Windows 7 上并且没有使用管理 shell 来处理所有事情。现在我确实有四个文件,但我不知道把它们放在哪里。 atm 我仍然收到链接错误。【参考方案3】:

将其与 MYSQL 库链接:

如果您使用的是 GCC:

$ gcc -Wall your_file.c - o your_program -lmysql

此外,您可能希望添加一个-L 目录以包含安装 MySQL 库的位置。

如果您提供确切的编译行/机制(Makefile、IDE 等)会有所帮助。

【讨论】:

【参考方案4】:

如果您使用的是 Eclipse CDT,则需要将 MySQL 库添加到链接器设置中。转到项目属性 -> GCC++ 链接器 -> 库,然后添加 mysql

【讨论】:

以上是关于qt:对“mysql_something@nr”的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

Qt官方对OpenSSL的编译方法的描述

Qt - 对主要的 QDialog 选择感到困惑

QT对Qt项目开发中遇到的问题的总结

在linux上支持qt对ug进行二次开发吗

qt - 如何对 qstandarditemmodel 进行永久排序

qt对sqlite数据库多线程的操作