首页 > 解决方案 > 如何交叉编译安装了 mariadb10 的 RPI3 (Stretch) 以与 QTCreator 一起使用?

问题描述

我正在交叉编译一个 QTCreator (5.9) C++ 程序,专门用于运行 Stretch 的 RPi 3 和 mariadb10。我在让 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

我已经四处搜寻了很多东西,并尝试了我遇到的所有明智的事情。谁能告诉我可能导致问题的 ./compile 中可能有什么问题?

标签: mariadbqt-creatorcross-compilingraspberry-pi3

解决方案


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

但是,我已经在考虑 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 配置脚本时,您必须指明 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 插件驱动一样。不知道。

来自南非的问候


推荐阅读