【问题标题】:cross compiling qt: Error while loading shared libraries交叉编译qt:加载共享库时出错
【发布时间】:2017-10-23 07:07:23
【问题描述】:

上周我收到了全新的 Colibri VF61 和 Toradex 的 Aster 载板。 我按照 Toradex 的指南介绍了如何准备板子以与 qt here 交叉编译。

教程中的一切都很完美,但是我尝试部署我的应用程序并且一切正常,直到我在目标设备上打开可执行文件,因为我收到以下消息:

加载共享库时出错:libQt5PrintSupport.so.5:无法打开共享对象文件:没有这样的文件或目录

我去查看我的目标设备中是否有任何 Qt 文件,但没有,所以我去了我的主机设备中的 sysroot 文件夹并将所有 Qt 文件复制到我的目标设备,(Qt5PrintSupport在那里)但是在我将所有文件复制到与我的 sysroot 中完全相同的位置之后,仍然出现相同的错误。

我复制的文件是:

LibIcal Qt5Core Qt5OpenGLExtensions Qt5Svg PulseAudio Qt5DBus Qt5Positioning Qt5SystemInfo Qt5 Qt5Declarative Qt5PrintSupport Qt5Test Qt53DCore Qt5Designer Qt5PublishSubscribe Qt5UiPlugin Qt53DExtras Qt5Enginio Qt5Qml Qt5Ui工具 Qt53DInput Qt5Gui Qt5Quick Qt5WebChannel Qt53DLogic Qt5Help Qt5QuickTest Qt5WebKit Qt53DQuick Qt5LinguistTools Qt5QuickWidgets Qt5WebKitWidgets Qt53DQuickExtras Qt5Location Qt5Script Qt5WebSockets Qt53DQuickInput Qt5Multimedia Qt5ScriptTools Qt5Widgets Qt53DQuickRender Qt5MultimediaWidgets Qt5Sensors Qt5X11Extras Qt53DRender Qt5Network Qt5SerialPort Qt5Xml Qt5Bluetooth Qt5Nfc Qt5ServiceFramework Qt5XmlPatterns Qt5Concurrent Qt5OpenGL Qt5Sql libxml2

在 /usr/lib/cmake 里面

和:

导入 libexec mkspecs 插件 qml

文件夹到 /usr/lib/qt5

我注意到问题可能是我在 /usr/lib/qt5 中没有“lib”文件夹,但是我不知道如何创建它,因为它不在我的 sysroot 中。

总结:我想通过交叉编译来执行我的应用程序,但是缺少 lib 文件夹,我不知道如何创建或链接它。

【问题讨论】:

  • 请注意,不能将 Qt 构建移动到不同的安装路径。无论您在构建系统上使用什么文件夹,都必须是目标上使用的文件夹。

标签: c++ linux qt cross-platform cross-compiling


【解决方案1】:

在与使用它的应用程序相同的路径中拥有一个库并不一定意味着您的应用程序可以找到它。遵循以下方法之一;

  • 将所需的qt库安装到系统的标准lib目录(例如/usr/lib/)
  • 将环境变量 LD_LIBRARY_PATH 设置为 qt 库所在的位置。惯例通常是有一个 bash 脚本设置它然后启动你的应用程序)或
  • 在编译时,您将 rpath 变量设置为 qt 库文件夹的位置(gcc 的 -rpath)

【讨论】:

  • 问题是我没有任何 lib 文件夹可以将LD_LIBRARY_PATH 链接到。我需要建立那个文件夹,但我不知道怎么做。
  • 也许您所缺少的只是“mkdir /usr/lib”? (如果 /usr 存在)。如果 /usr 也不存在,则在其前面加上“mkdir /usr”。然后只需将库文件复制进去。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
相关资源
最近更新 更多