Problem building mySQl pluggin
-
Hi,
I have followed all the folowing steps for building MySQL pluging on the page : http://doc-snapshot.qt-project.org/4.8/sql-driver.html
Open the DOS prompt, go to C:\MySQL\MySQL51\lib\opt, and run the following commands:
@
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
@
Open the DOS prompt, go to C:\Qt\4.6.2 and run the following commands:
@
configure.exe -debug-and-release -platform win32-g++ -qt-sql-mysql -l mysql -I C:\MySQL\MySQL51\include -L C:\MySQL\MySQL51\lib\opt
mingw32-make sub-src
@
But this is what I get everytime:
@
g++ -mthreads -shared -Wl,--out-implib,c:\QtSDK\QtSources\4.8.1\lib\libQtSqld4.a
-o ....\lib\QtSqld4.dll object_script.QtSqld.Debug -L"c:\QtSDK\QtSources\4.8.
1\lib" -L"c:\QtSDK\QtSources\4.8.1\lib" tmp\obj\debug_shared\QtSqld_resource_res
.o -lmysql -LC:\MySQLInstall\Connector-C-6.0.2\lib\opt -lQtCored4
Creating library file: c:\QtSDK\QtSources\4.8.1\lib\libQtSqld4.a
./tmp\obj\debug_shared\qsql_mysql.o: In functioncodec': C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mysql/qsql_mysql.cpp:223: undefined ref erence to
mysql_character_set_name@4'
./tmp\obj\debug_shared\qsql_mysql.o: In functionqMakeError': C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mysql/qsql_mysql.cpp:234: undefined ref erence to
mysql_error@4'
C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mysql/qsql_mysql.cpp:237: undefined ref
erence tomysql_errno@4' ./tmp\obj\debug_shared\qsql_mysql.o: In function
qMakeStmtError':
C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mysql/qsql_mysql.cpp:309: undefined ref
erence tomysql_stmt_error@4' C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mysql/qsql_mysql.cpp:312: undefined ref erence to
mysql_stmt_errno@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:358: undefined reference tomysql_stmt_result_metadata@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:362: undefined reference to
mysql_num_fields@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:369: undefined reference tomysql_fetch_field@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:432: undefined reference to
mysql_free_result@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:438: undefined reference tomysql_store_result@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:440: undefined reference to
mysql_free_result@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:437: undefined reference tomysql_next_result@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:446: undefined reference to
mysql_stmt_close@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:452: undefined reference tomysql_free_result@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:496: undefined reference to
mysql_stmt_data_seek@12'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:498: undefined reference tomysql_stmt_fetch@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:513: undefined reference to
mysql_data_seek@12'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:514: undefined reference tomysql_fetch_row@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:529: undefined reference to
mysql_stmt_fetch@4'
./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys
ql/qsql_mysql.cpp:544: undefined reference tomysql_fetch_row@4' ./tmp\obj\debug_shared\qsql_mysql.o:C:\QtSDK\QtSources\4.8.1\src\sql/drivers/mys ql/qsql_mysql.cpp:1511: undefined reference to
mysql_real_escape_string@16'
collect2: ld returned 1 exit status
mingw32-make[2]: *** [....\lib\QtSqld4.dll] Error 1
mingw32-make[2]: Leaving directoryC:/QtSDK/QtSources/4.8.1/src/sql' mingw32-make[1]: *** [debug-all] Error 2 mingw32-make[1]: Leaving directory
C:/QtSDK/QtSources/4.8.1/src/sql'
mingw32-make: *** [sub-sql-make_default-ordered] Error 2C:\QtSDK\QtSources\4.8.1>
@pleeeeease help :(
Zia
-
Hi Gerolf,
I downloaded and installed the 32 bit version of the connector using the installer "mysql-connector-c-6.0.2-win32.msi" but getting the same errors as above. Also this installer didn't provide a combo box for selecting 32 bit version.
Can u share the installer that you had used to install 32 bit version. U can send it at syedzia5@rediffmail.com
Regards
Zia
-
Hello Ziaddin,
You are gonna need to stick to the 32 bit version of everything for MySql. I have an article that I will link this evening for you that should get you going (Sorry, left my laptop at home because it's compiling the open source version of Qt). I had a lot of trouble building this driver until I found this article I will be linking later.
-
I had enormous problems with installing this driver. I have been suggested to download the latest MSI version of MySql connector 6xxx/C. I almost sure it was 32-bit version. I did not have to run either reimp or dlltoo. I went straight to configure.exe and mingw32-make. I used MinGW 4.7.0. Two things I did that are not in documentation:
- run command line as Administrator
- used configure with option -spec mingw32-g46 (or something like this)
I am not sure about the last command. I'll let you know as soon as I can.
-
As promised here you go: http://www.seppemagiels.com/blog/create-mysql-driver-qt-windows
-
Thanx weblife :)
It worked :)
I am sorry for the late reply.
How ever now I get QSqlError(2003, "QMYSQL: Unable to connect", "Can't connect to MySQL server on 'localhost' (10061)")
code for connection is :
@
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("drugdb");
db.setHostName("localhost");
db.setPort(3306);
db.setUserName("root");
db.setPassword("zrsyed15967");
if (!db.open()) {
qDebug()<<db.lastError();
QMessageBox::critical(0, tr("Cannot open database"),
tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it."), QMessageBox::Cancel);
return;
}
@Edit: please use @ tags around code sections; Andre
-
@Ziaddin Good news! Sorry it has taken me so long also, semester just started and trying to finish project I started so I can focus back on school. I am at work now and noticed your post and will have to get back to you tomorrow.
In the meantime can you please edit your post so your code shows its formatted output. To do this either add the @ symbol to the beginning and end of the coded area.
PS: Just to note I am pretty sure your syntax has a issue but will go over later. Another issue could be your remote access authorities, check to make sure you don't need to grant your IP access from mysql remote manager.
-
*@*Ziaddin Your code looks okay. I am almost certain it is your MySql or server settings. I would suggest checking port numbers usernames and passwords. Also be sure you posting passwords and user info that is fake for your own safety. I personally use my web host MySql database so I am not the one to guide you on local settings.
Also-
I say keep it easy when first experimenting with everything and break down each step, including variables. This is how I would do it.
@ QString dbHost = "www.themindspot.com";
QString dbName = "databaseName";
QString dbUser = "databaseUser";
QString dbPass = "databasePassword";
qint16 dbPort = 3306; // Changes per host settings.QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(dbHost); db.setPort(dbPort); db.setDatabaseName(dbName); db.setUserName(dbUser); db.setPassword(dbPass); if (db.open()){ qDebug() << "Yeah!!!!"; } else{ qDebug() << db.lastError().text(); }@
I don't know if this matters but I would would use the ordered functions I demonstrate because it could be that also, maybe? I wrote mine like I was logging in to the system step by step.