- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
上下文:我构建了一个 c++在 OpenSUSE 平台(某些 Linux 发行版)上使用 Qt 5.13.1 可执行。
我必须将它安装在一个已经安装了旧 Qt 版本的平台上,我无法摆脱它。
所以我在自定义位置安装了所需 Qt 共享库(加上平台插件)的正确版本,并设置了 qt.conf将指定要使用的库路径的文件(插件路径也是如此)。
我自己的Qt安装文件夹包含:
qt.conf 文件与我的可执行文件一起安装,内容如下:
[Paths]
Prefix = relative_path/from/executable_location/to/install_dir/
我不需要在条目中指定 lib/ 和 plugins/ 目录 Libraries
和 Plugins
因为它们默认为这些值。
但即使我明确设置它们,也没有任何改变。
我也尝试过使用绝对路径,但它也没有任何改变。
问题:我遇到的问题是我的可执行文件没有加载库,也没有找到平台插件,尽管 qt.conf 文件已成功加载。
我已经显示了以下指令的输出:
QLibraryInfo::location(QLibraryInfo::PrefixPath);
QLibraryInfo::location(QLibraryInfo::LibrariesPath);
QLibraryInfo::location(QLibraryInfo::PluginsPath);
它们包含我在 qt.conf 文件中指定的内容。所以问题不是出自这里。
问题:我已经检查过 QLibraryInfo
字段成员已正确初始化,但似乎我的 QApplication
实例只是忽略了它。
如何使 QLibraryInfo
配置被 QApplication
实例应用?
我知道存在一个 QCoreApplication::addLibraryPath()
成员比可用于加载库但我也找不到 Qt 插件的任何类似内容。
但我很确定我们不必使用此函数,因为信息已由 QLibraryInfo
加载。
编辑:
经过更多调查,我发现它可以很好地加载插件。
加载库的问题仍然相同。似乎我错过了什么,但我想不通。
现在,我使用 LD_PRELOAD
环境变量来让它工作(这很丑陋)。
编辑 2:
我在互联网上发现了两个关于有同样问题的人的帖子:
第二个解释了为什么库加载不起作用。
实际上,为了能够解析 qt.conf 文件,应用程序需要加载核心模块(在我的例子中是 libQt5Core.so.5 ) 这是有道理的(我早该想到的)。
这里的问题是 libQt5Core.so.5 是要加载的库之一(这是一个恶性循环),因此可执行文件根本无法运行。
解决方案(仍然不加载任何库): 看来我无法避免使用 LD_PRELOAD
加载 libQt5Core.so.5 > 或将其添加到可执行位置旁边。
注意:如果系统“lib”目录中没有现有的 Qt 安装,我们可以使用 LD_LIBRARY_PATH
而不是 LD_PRELOAD
。< br/>我在这里使用 LD_PRELOAD
因为我希望我的 Qt 安装优先于已经存在的安装(并且首先加载/而不是系统安装的)。
最佳答案
您的库的问题在于 Linux 动态链接器仅搜索几个标准位置,以及 /etc/ld.so.conf
中配置的其他路径。一种解决方法是环境变量 LD_LIBRARY_PATH 与您的库的路径。另一个是嵌入在二进制文件中的 RPATH/RUNPATH 值。 CMake 默认使用 RPATH,您也可以在 Qmake 项目中使用 QMAKE_RPATH。您可以使用 RPATH 手动组装一个包含程序和库的目录,但我的建议是 create AppDir / AppImage使用 linuxdeployqt 的包这与使用官方 Qt 工具非常相似 windeployqt和 macdeployqt .
关于c++ - 如何在 QApplication 中应用 QLibraryInfo 中加载的库和插件配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975383/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!