温馨提示:本文翻译自stackoverflow.com,查看原文请点击:mariadb - How to cross compile a RPI3 (Stretch) with mariadb10 installed for use with QTCreator?
cross-compiling mariadb qt-creator raspberry-pi3

mariadb - 如何交叉编译安装了可与QTCreator一起使用的mariadb10的RPI3(Stretch)?

发布于 2020-05-28 16:06:56

我正在交叉编译QTCreator(5.9)C ++程序,仅在运行Stretch和mariadb10的RPi 3上使用。我在使MYSQL在编译后可用时遇到问题。主机正在运行Ubuntu 18。

我已经运行了以下几行来创建交叉编译库。除了MYSQL不可用外,其他一切似乎都很好:

cd ~/raspi3;
git clone https://github.com/raspberrypi/tools;
git clone git://code.qt.io/qt/qtbase.git -b 5.9;
cp ~/Desktop/sysroot-relativelinks.py ~/raspi3; #Copy previously downloaded file. No longer available as of 2/5/2019 at recommended https://raw.githubusercontent.com/riscv/riscv-poky/priv-1.10/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py;
mkdir sysroot/usr sysroot/opt;
rsync -avz pi@$ip:/lib sysroot;
rsync -avz pi@$ip:/usr/include sysroot/usr;
rsync -avz pi@$ip:/usr/lib sysroot/usr;
rsync -avz pi@$ip:/opt/vc sysroot/opt;
python ./sysroot-relativelinks.py sysroot;
cd qtbase;
./configure -release -opengl es2 -device linux-rasp-pi3-g++ -I /usr/arm-linux-gnueabihf -device-option CROSS_COMPILE=~/raspi3/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sql-mysql MYSQL_INCDIR=~/raspi3/sysroot/usr/include/mysql MYSQL_LIBDIR=~/raspi3/sysroot/usr/lib/arm-linux-gnueabihf MYSQL_LIBS="-lmariadbclient" -sysroot ~/raspi3/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi3/qt5pi -hostprefix ~/raspi3/qt5 -v -nomake examples -nomake tests -nomake tools -no-use-gold-linker -recheck-all;

上面的./configure运行并生成以下报告(节选):

Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. yes
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... yes

Note: Also available for Linux: linux-clang linux-icc

Note: PKG_CONFIG_LIBDIR automatically set to /home/max/raspi3/sysroot/usr/lib/pkgconfig:/home/max/raspi3/sysroot/usr/share/pkgconfig:/home/max/raspi3/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig

Note: PKG_CONFIG_SYSROOT_DIR automatically set to /home/max/raspi3/sysroot

Note: Dropped compiler flags '-pthread' when detecting library 'glib'.

ERROR: Feature 'sql-mysql' was enabled, but the pre-condition 'libs.mysql' failed.

注意:我也尝试删除MYSQL_INCDIR,MYSQL_LIBDIR和MYSQL_LIBS,但结果没有变化

当我编译并运行在QTCreator中创建的程序时,可以看到没有可用的QMYSQL驱动程序,也没有数据库连接:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 QTDS QTDS7
FAILED TO CONNECT TO DB

我在ALOT周围打猎,几乎尝试过遇到的所有明智的事情。谁能告诉我可能导致问题的./compile问题是什么?

查看更多

提问者
Max
被浏览
141
Banshee10000 2020-03-12 19:45

好的,我已经成功了并且有可行的解决方案。我按照本教程设置了一个针对字母https://mechatronicsblog.com/cross-compile-and-deploy-qt-5-12-for-raspberry-pi/的交叉编译环境。

但是,Ive进行了一些更改,因此考虑到了MySQL。首先,在Raspberry Pi方面,我为MariaDB安装了其他软件包,因为它替代了Debian Buster中的MySQL。我还在Raspberry Pi 3 B +上使用了Respbian lite版本(Buster)。

我的Linux主机是:VM中的Linux Mint 19.3。因为肉桂棒(^^,)

在Raspberry Pi上将SSH插入并安装。

sudo apt install mariadb-client mariadb-common mysql-common libmariadb-dev-compat libmariadbclient-dev libqt5sql5-mysql libqt5sql5 libqt5sql5-sqlite

作为旁注。不知道是否需要它,但是在Raspberry Pi上,我还安装了libqt5core和许多其他Qt相关的库。网络,小部件,核心等。

libmariadb-DEV-compat的包将创造一切必要的MariaDB的和MySQL之间的兼容性的联系。然后,当您调用qt configure脚本时,必须指出mysql(mariadb)库的路径:

退出Raspberry Pi SSH会话。在主机PC上。
确保在安装所有MariaDB库等之后运行rsync。按照教程进行。

rsync -avz pi@raspberrypi_ip:/lib sysroot
rsync -avz pi@raspberrypi_ip:/usr/include sysroot/usr
rsync -avz pi@raspberrypi_ip:/usr/lib sysroot/usr
rsync -avz pi@raspberrypi_ip:/opt/vc sysroot/opt

现在要配置Qt-Everywhere(我使用Qt 5.12.5)时,我们需要将MySQL添加到make配置中

这是我针对Qt 5.12.5的确切配置脚本,可使用MySQL(MariaDB)驱动程序从源代码对其进行编译。

./configure -release -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm -sql-mysql MYSQL_INCDIR=~/raspi/sysroot/usr/include/mysql MYSQL_LIBDIR=~/raspi/sysroot/usr/lib/arm-linux-gnueabihf

在配置步骤之后,检查以确认MySQL设置为yes。就像是:

 Qt Sql Drivers:
 DB2 (IBM) .............................. no
 InterBase .............................. no
 MySql .................................. yes
 OCI (Oracle) ........................... no
 ODBC ................................... no
 PostgreSQL ............................. yes
 SQLite2 ................................ no
 SQLite ................................. yes

继续列出的教程,直到您将树莓派添加为Qt Creator中的设备...为止。

另一件事让我昨晚深夜咳嗽了约24小时

在Qt 5.14.1中,在Qt Creator中设置设备(Raspberry Pi)时,您现在必须使用SSH密钥。密码选项不再存在。让Qt生成SSH密钥,然后通过SCP或其他方式将其复制到您的树莓派。“ qtc_id.pub”文件进入/home/pi/.ssh,然后在.ssh文件夹中创建一个名为“ authorized_keys”的文件。

touch ~/.ssh/authorized_keys

下一个

cat "qtc_id.pub" >> authorized_keys

这只是将名称qtc_id.pub复制为该文件的纯文本格式。保存文件并退出。然后

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

现在,如以上教程中所述,在Qt Creator中进行设置时,您应该能够连接到Raspberry Pi。

还:我尝试使用最新的Qt 5.14.1源构建它。它失败了,有很多问题,我只是没有时间或精力去尝试。我只是想对项目进行编程。

我希望这对您@Max和其他人有帮助。对我来说,我成功了。这是一个艰苦的过程。从源代码构建Qt并设置树莓派交叉编译环境一直是我很长一段时间以来遇到的最令人沮丧的事情。在大多数情况下,文档已过时或非常模糊。处理许多可能出错的方法的方法,但就目前而言,这是我可以使所有方法正常工作的唯一方法。在已经编译了Qt之后,我仍然不知道如何编译MySQL。就像在编译MySQL插件驱动器一样。不知道。

南非问候