Solved issues with building QMYSQL plugin
-
It will make things easier to build the plugin.
IIRC
CONFIG += c++11
should only enable C++11 feature and not later. -
@SGaist I think we're getting closer. I installed the package you referenced above, and ran this qmake command:
/opt/Qt/5.8/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient_r" /home/mzimmers/QtStuff/qtbase/src/plugins/sqldrivers/mysql/mysql.pro/
I then edited the Makefile, changing the 2 occurrences of "-std=c++1z" to "-std=c++11" and ran make. Here's the output:
mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$ make rm -f libqsqlmysql.so g++ -Wl,--no-undefined -Wl,-O1 -Wl,--enable-new-dtags -Wl,-z,origin -Wl,-rpath,\$ORIGIN/../../lib -Wl,-rpath,\$ORIGIN/../../lib -shared -o libqsqlmysql.so .obj/qsql_mysql.o .obj/main.o .obj/moc_qsql_mysql_p.o -L/usr/lib -lmysqlclient_r -L/opt/Qt/5.8/gcc_64/lib -lQt5Sql -lQt5Core -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl /usr/bin/ld: cannot find -lmysqlclient_r collect2: error: ld returned 1 exit status Makefile:115: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1 mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$
I also tried LIBS+=-L/usr/lib/x86_64-linux-gnu (which is the actual directory) with the same results. Any idea what's wrong here?
Thank you.
-
You shouldn't need the -l parameter
-
@SGaist OK, I removed it. Here are the results:
mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$ /opt/Qt/5.8/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib/" ./mysql.pro mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$ make rm -f libqsqlmysql.so g++ -Wl,--no-undefined -Wl,-O1 -Wl,--enable-new-dtags -Wl,-z,origin -Wl,-rpath,\$ORIGIN/../../lib -Wl,-rpath,\$ORIGIN/../../lib -shared -o libqsqlmysql.so .obj/qsql_mysql.o .obj/main.o .obj/moc_qsql_mysql_p.o -L/usr/lib/ -L/opt/Qt/5.8/gcc_64/lib -lQt5Sql -lQt5Core -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl /usr/bin/ld: cannot find -lz /usr/bin/ld: cannot find -lssl /usr/bin/ld: cannot find -lcrypto collect2: error: ld returned 1 exit status Makefile:115: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1 mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$
I don't know whether this is progress or a step back. Do I need to specify paths for the libraries that make can't find?
On a more general note: I notice that I seem to be needing to do a lot of things that aren't mentioned on the page that talks about building this plugin. Is the page incomplete, or is there something atypical about my Qt installation?
Thanks.
-
You need the development packages for OpenSSL and zlib.
That's rather a side effect of the dependencies of the 3rd party that can change over time.
-
@SGaist so, I need these?
https://www.openssl.org/source/openssl-1.1.0e.tar.gz
http://www.zlib.net/zlib-1.2.11.tar.gzThey aren't explicitly labeled "development packages" but I'm hoping this is what I need...
-
It seems you are forgetting you are running Linux ;)
Use your distributions package manager for that like you did to install the MySQL development package.
-
@SGaist believe it or not, I did look there first, but I wasn't sure what to choose. My best guesses would be:
openssl - Secure Sockets Layer toolkit - cryptographic utility
zlib1g-dev - compression library - development(I found these among the results of an apt-cache search for openssl and zlib.)
Did I guess well?
-
Sorry, it's
libssl-dev
the OpenSSL package is the command line client.
As for zlib, yes -
I installed those two, and here is the output:```
mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$ make
rm -f libqsqlmysql.so
g++ -Wl,--no-undefined -Wl,-O1 -Wl,--enable-new-dtags -Wl,-z,origin -Wl,-rpath,$ORIGIN/../../lib -Wl,-rpath,$ORIGIN/../../lib -shared -o libqsqlmysql.so .obj/qsql_mysql.o .obj/main.o .obj/moc_qsql_mysql_p.o -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient_r -L/opt/Qt/5.8/gcc_64/lib -lQt5Sql -lQt5Core -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl
/usr/bin/ld: cannot find -lmysqlclient_r
collect2: error: ld returned 1 exit status
Makefile:115: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed
make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1
mzimmers@debian:~/QtStuff/qtbase/src/plugins/sqldrivers/mysql$I have a file called "libmysqlclient_r.so.18" in /usr/lib/x86_64-linux-gnu...is this not the library it wants? Thanks. I appreciate your staying up so late to help me with this.
-
It looks like you didn't install the libmysqlclient-dev package.
-
@SGaist yes I did. I just tried again, and apt-get confirmed I'm up to date on this package. And according to the file list on the page you linked, the libraries are in the right location:
mzimmers@debian:/usr/lib/x86_64-linux-gnu$ pwd /usr/lib/x86_64-linux-gnu mzimmers@debian:/usr/lib/x86_64-linux-gnu$ ls libmy* libmysqlclient.a libmysqlclient_r.so.18.0.0 libmysqlclient.so.18 libmysqlclient.so.20 libmysqlservices.a libmysqlclient_r.so.18 libmysqlclient.so libmysqlclient.so.18.0.0 libmysqlclient.so.20.3.4 mzimmers@debian:/usr/lib/x86_64-linux-gnu$
-
There's something strange here, you are missing at least the
libmysqlclient_r.so
symlink in that folder. -
@SGaist I just did an apt-get remove and another install...same files. Should I file a bug report in the Debian forum?
-
Since you have two sets of MySQL libraries there might be something else.
Can you post the result of
dpkg -l | grep -i mysql
? -
@SGaist :
mzimmers@debian:/usr/lib/x86_64-linux-gnu$ sudo dpkg -l | grep -i mysql
[sudo] password for mzimmers:
ii libmysqlclient-dev 5.7.17-1debian8 amd64 MySQL development headers
ii libmysqlclient18:amd64 5.5.54-0+deb8u1 amd64 MySQL database client library
ii libmysqlclient20:amd64 5.7.17-1debian8 amd64 MySQL shared client libraries
ii libmysqlcppconn7 1.1.3-6 amd64 MySQL Connector for C++ (library)
ii libqt5sql5-mysql:amd64 5.3.2+dfsg-4+deb8u2 amd64 Qt 5 MySQL database driver
ii mysql-apt-config 0.8.3-1 all Auto configuration for MySQL APT Repo.
ii mysql-client 5.7.17-1debian8 amd64 MySQL Client meta package depending on latest version
ii mysql-common 5.7.17-1debian8 amd64 MySQL Common
ii mysql-community-client 5.7.17-1debian8 amd64 MySQL Client
ii mysql-community-server 5.7.17-1debian8 amd64 MySQL Server
ii mysql-community-source 5.7.17-1debian8 amd64 MySQL source
ii mysql-server 5.7.17-1debian8 amd64 MySQL Server meta package depending on latest version
ii mysql-workbench 6.2.3+dfsg-7 amd64 MySQL Workbench - a visual database modeling, administration and queuing tool
ii mysql-workbench-data 6.2.3+dfsg-7 all MySQL Workbench -- architecture independent data
ii python-mysql.connector 1.2.3-2 all pure Python implementation of MySQL Client/Server protocol
mzimmers@debian:/usr/lib/x86_64-linux-gnu$ -
There's something fishy here, you have two sets of mysql client libraries and the dev package you have matches the libmysqlclient20 while the one I was suggesting is matching libmysqlclient18. I'd remove the XX20 related packages and re-install the libmysqlclient-dev for 18.
-
I can do that. Here's a snippet of my CLI:
mzimmers@debian:/usr/lib/x86_64-linux-gnu$ apt list --installed | grep libmysqlclient WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts. libmysqlclient-dev/unknown,now 5.7.17-1debian8 amd64 [installed] libmysqlclient18/stable,now 5.5.54-0+deb8u1 amd64 [installed,automatic] libmysqlclient20/unknown,now 5.7.17-1debian8 amd64 [installed,automatic] mzimmers@debian:/usr/lib/x86_64-linux-gnu$ sudo apt-get remove libmysqlclient20 [sudo] password for mzimmers: Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: libmysqlclient-dev libmysqlclient20 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. After this operation, 11.4 MB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 156868 files and directories currently installed.) Removing libmysqlclient-dev (5.7.17-1debian8) ... Removing libmysqlclient20:amd64 (5.7.17-1debian8) ... Processing triggers for man-db (2.7.0.2-5) ... Processing triggers for libc-bin (2.19-18+deb8u7) ... mzimmers@debian:/usr/lib/x86_64-linux-gnu$ apt list --installed | grep libmysqlclient WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts. libmysqlclient18/stable,now 5.5.54-0+deb8u1 amd64 [installed,automatic] mzimmers@debian:/usr/lib/x86_64-linux-gnu$
As you can see, when I removed version 20, removed the development package as well. Should I reinstall both that, and version 18?
-
You still have the stable 18 installed so you should only need to install the dev package. Ensure that is also comes from the stable repo and you should be fine.
-
I did an apt-cache show libmysqlclient-dev and it gave me 3 choices (omitted for brevity). How do I know which one I want (all different versions) and how do I make this selection?
Thanks.