Qt (static) MYSQL не хочет работать



  • Собирал Qt так:
    @configure.exe -debug-and-release -opensource -confirm-license -c++11 -static -opengl desktop -no-angle -no-vcproj -nomake examples -qt-sql-sqlite -qt-sql-mysql -I D:/Development/mysql-dev/include -L D:/Development/mysql-dev/lib/libmysql.dll -qt-sql-odbc
    @

    Где D:/Development/mysql-dev - директория установленной "MySQL":http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.16.0.msi.
    При компилировании такого кода:
    @#include "widget.h"
    #include <QApplication>
    #include <QSplashScreen>
    #include <QtSql/QSqlDatabase>

    static bool CreateConnection();

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    QSplashScreen *pSplash = new QSplashScreen;
    pSplash->setPixmap(QPixmap("D:/Development/Privatbank.png"));
    pSplash->show();

    Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
    

    // pSplash->showMessage(QObject::tr("Setting up the main windows..."),
    // topRight, Qt::white);

    Widget w;
    pSplash->showMessage(QObject::tr("Connecting to BD..."),
                          topRight, Qt::white);
    if (!CreateConnection()) {
        pSplash->showMessage(QObject::tr("Cannot connect to BD!"),
                              topRight, Qt::white);
        exit(1);
    }
    pSplash->finish(&w);
    w.show();
    delete pSplash;
    return a.exec&#40;&#41;;
    

    }

    static bool CreateConnection()
    {
    QSqlDatabase DB = QSqlDatabase::addDatabase("QMYSQL");
    DB.setHostName("mysql.hostinger.com.ua");
    DB.setDatabaseName("имя бд");
    DB.setUserName("здесь был логин");
    DB.setPassword("пароль от бд");
    if (!DB.open()) {
    // DB.lastError().text();
    return false;
    }
    return true;
    }
    @

    Мне выбивало 86 ошибок (только при статической линковке, в дин. всё было норм).
    И ещё 1 вопрос: нужно ли в .pro файле указывать QT += sql при статической линковке или это только для динамической? (ошибки и так и так в стат.)



  • [quote author="Matumba" date="1393080571"]Собирал Qt так:
    configure.exe -debug-and-release -opensource -confirm-license -c++11 -static -opengl desktop -no-angle -no-vcproj -nomake examples -qt-sql-sqlite -qt-sql-mysql -I D:/Development/mysql-dev/include -L D:/Development/mysql-dev/lib/libmysql.dll -qt-sql-odbc
    [/quote]

    -L указывает путь (у тебя будет -L D:/Development/mysql-dev/lib) к библиотекам .lib для MS Studio или .a для mingw, контретная либа указывается через -l (строчная английская "эл"). Чтобы из mysql-ной dll получить библиотеку с расширением .a, надо ещё помучиться, потому что в дефолтную сборку mysql включены только .lib для studio, а сборку на mingw разработчики mysql (и альтернативной MariaDB) не поддерживают.
    Как получить библиотеки .a для mingw, описано, например, здесь на примере 4-го Qt:
    http://blog.sulin.pro/2009/11/linux-qt-static-mysql-sqlite.html
    Кажется, там reimp нужна какой-то определённой версии, и готовая qt-программа всё равно будет требовать libmysql.dll. Короче, не полностью статическая сборка.
    Для MS Studio всё это не нужно, потому что либы уже есть.

    Путь к инклудам и либам можно указать в переменных окружения INCLUDE и LIB (через точку с запятой, если нужно несколько библиотек в разных директориях), тогда не надо в configure писать -I и -L. Например, у меня так:
    INCLUDE =
    C:\Program Files\MySQL\MySQL Server 5.5\include;U:\develop\libs\include
    LIB =
    C:\Program Files\MySQL\MySQL Server 5.5\lib;U:\develop\libs\lib

    QT += sql нужно указывать всегда, если обращаешься через Qt к базам данных.
    Функция QSqlDatabase::drivers() выдаст все драйверы, доступные для программы. Если в списке нет mysql, значит, он по какой-то причине не доступен (например, если драйвер вообще не был собран).


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.