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

标签 mariadb qt-creator cross-compiling raspberry-pi3

我正在交叉编译 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 中可能有什么问题导致了这个问题?

最佳答案

好的,我已经成功了,并且有了一个可行的解决方案。 我按照本教程设置了一个交叉编译环境 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 精简版 (Buster)。

我的 Linux 主机是:虚拟机中的 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 session 。 在主机上。
确保在安装所有 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 是否设置为是。 像这样的东西:

 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 key 。 密码选项不再存在。让 Qt 生成 SSH key 并通过 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 插件驱动一样。不知道。

来自南非的问候

关于mariadb - 如何交叉编译安装了 mariadb10 的 RPI3(Stretch)以与 QTCreator 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54595241/

相关文章:

c++ - Qt单元测试会在Qt Creator的“应用程序输出” Pane 中为Qt 4.8重复所有操作两次(但在Qt 5.2.2中不会)

c++ - 我如何知道我的编译器是否支持 XXXX C++11 功能?

qt - QML:如何实现子级的信号处理程序

mysql - 如何使用 Laravel 访问 MariaDB 中的 json 属性?

node.js - 在 MariaDB 中执行枚举数组的方法?

docker - github 操作 - 无法连接到 mysql

c++ - 是什么导致样式表渗入子小部件

android - 基本的 Android 应用问题

c - 为 ARM9 Montavista Linux 交叉编译 OpenCV 时出现问题

mysql - 尝试在 Bitnami 的 WordPress 多层堆栈中导入/导出 MariaDB 数据库时出现 2002 代码错误