- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个可以在大多数 Linux 发行版(例如 Blender)上运行的独立二进制存档 (.tar.gz)。我对 CMake 还不太熟悉。据我所知,所有依赖项都可以在安装步骤中通过 fixup_bundle
解决。宏。我假设安装目录应该成为一个独立的应用程序,可以在没有安装 Qt 的其他计算机上复制和运行?我不确定 CPack 在这里的作用。
我的Qt安装路径是/home/<user>/Qt5.12.2/5.12.2/gcc_64/qmake
。我遵循了一些答案并复制了 platform/libqxcb.so
和libQt5XcbQpa.so.5
进入安装目录。为了测试独立包,我更改了 ~/Qt5.12.2
进入~/qt
。这是可执行文件运行时的错误消息:
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb.
[1] 25965 abort (core dumped) ./<executable_name>
我也尝试过qt.conf
并将前缀和插件路径设置为 ./
但这没有用。但我发现的一件有趣的事情是,当我设置 Plugins = /home/<user>/qt/5.12.2/gcc_64/plugins
时,显示一个小 Qt 窗口,但附带一堆错误消息:
qrc:/main.qml:4:1: module "QtQuick.Dialogs" is not installed
qrc:/main.qml:1:1: module "QtQuick" is not installed
qrc:/main.qml:3:1: module "QtQuick.Controls" is not installed
......
qrc:/main.qml:3:1: module "QtQuick.Controls" is not installed
qrc:/main.qml:5:1: module "QtQuick.Controls.Styles" is not installed
qrc:/main.qml:2:1: module "QtQuick.Layouts" is not installed
然后通过ldd
测试两个libqxcb.so,找到了一些信息,尽管我不确定这就是真正的原因。
ldd ~/qt/5.12.2/gcc_64/plugins/platforms/libqxcb.so
显示原始 libqxcb.so 链接了 Qt 安装附带的库:
libQt5XcbQpa.so.5 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libQt5XcbQpa.so.5 (0x00007ff8936d7000)
libQt5Gui.so.5 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libQt5Gui.so.5 (0x00007ff892d64000)
libQt5DBus.so.5 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libQt5DBus.so.5 (0x00007ff892ad8000)
libQt5Core.so.5 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libQt5Core.so.5 (0x00007ff892343000)
......
libicui18n.so.56 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libicui18n.so.56 (0x00007ff8914ee000)
libicuuc.so.56 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libicuuc.so.56 (0x00007ff891136000)
libicudata.so.56 => /home/giokka/qt/5.12.2/gcc_64/plugins/platforms/../../lib/libicudata.so.56 (0x00007ff88f751000)
......
ldd <path_to_project>/build/install/platforms/libqxcb.so
显示它链接到系统 Qt 库,这不是我的项目构建的库:
./platforms/libqxcb.so: /lib64/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found (required by ./platforms/libqxcb.so)
./platforms/libqxcb.so: /lib64/libQt5Gui.so.5: version `Qt_5_PRIVATE_API' not found (required by ./platforms/libqxcb.so)
libQt5XcbQpa.so.5 => /lib64/libQt5XcbQpa.so.5 (0x00007f1d8ea75000)
libQt5Gui.so.5 => /lib64/libQt5Gui.so.5 (0x00007f1d8e41e000)
libQt5DBus.so.5 => /lib64/libQt5DBus.so.5 (0x00007f1d8e382000)
libQt5Core.so.5 => /lib64/libQt5Core.so.5 (0x00007f1d8de62000)
......
libicui18n.so.63 => /lib64/libicui18n.so.63 (0x00007f1d8cf37000)
libicuuc.so.63 => /lib64/libicuuc.so.63 (0x00007f1d8cd64000)
libicudata.so.63 => /lib64/libicudata.so.63 (0x00007f1d8afd0000)
......
CMakeLists.txt
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(OpenGLUnderQML LANGUAGES CXX)
set(CMAKE_PREFIX_PATH "$ENV{HOME}/Qt5.12.2/5.12.2/gcc_64/lib/cmake")
set(qt_lib_path "$ENV{HOME}/Qt5.12.2/5.12.2/gcc_64")
list(APPEND qt_modules
Core
Gui
Quick
DBus
)
foreach(module ${qt_modules})
list(APPEND qt_libs "Qt5::${module}")
endforeach()
include(GNUInstallDirs)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
find_package(Qt5 COMPONENTS ${qt_modules} REQUIRED)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
include_directories(include/)
list(APPEND headers
include/Scene.hpp
include/Renderer.hpp
include/VertexArray.hpp
include/VertexBuffer.hpp
include/VertexLayout.hpp
include/IndexBuffer.hpp
include/Shader.hpp
)
list(APPEND qrc
qml/qml.qrc
res/fonts.qrc
res/shaders.qrc
)
add_executable(${PROJECT_NAME}
src/main.cpp
src/Scene.cpp
src/Renderer.cpp
src/VertexArray.cpp
src/VertexBuffer.cpp
src/VertexLayout.cpp
src/IndexBuffer.cpp
src/Shader.cpp
${headers}
${qrc}
)
target_link_libraries(${PROJECT_NAME}
PUBLIC
${qt_libs}
)
file(RELATIVE_PATH _rel "${CMAKE_INSTALL_PREFIX}/install" "${CMAKE_INSTALL_PREFIX}")
set(_rpath "\$ORIGIN/${_rel}")
file(TO_NATIVE_PATH "${_rpath}/install" app_RPATH)
set_target_properties(${PROJECT_NAME}
PROPERTIES
SKIP_BUILD_RPATH OFF
BUILD_WITH_INSTALL_RPATH OFF
INSTALL_RPATH ${app_RPATH}
INSTALL_RPATH_USE_LINK_PATH ON
)
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_BINARY_DIR}/install)
install(
CODE "
include(BundleUtilities)
fixup_bundle(\"${CMAKE_BINARY_DIR}/install/${PROJECT_NAME}\" \"\" \"\")
"
DESTINATION ${CMAKE_BINARY_DIR}/install
COMPONENT Runtime
)
install(FILES "$<TARGET_FILE:Qt5::QXcbIntegrationPlugin>" DESTINATION ${CMAKE_BINARY_DIR}/install/platforms)
qt.conf
[Paths]
Prefix = ./
Plugins = /home/giokka/qt/5.12.2/gcc_64/plugins
这是我的qt.conf
文件,但它不起作用。
[Paths]
Prefix = .
Libraries = lib
Qml2Imports = qml
Plugins = plugins
但是,这个脚本在我的编译计算机上有效,但在另一台计算机上无效:
export LD_LIBRARY_PATH=`pwd`/lib
export QML_IMPORT_PATH=`pwd`/qml
export QML2_IMPORT_PATH=`pwd`/qml
export QT_QPA_PLATFORM_PLUGIN_PATH=`pwd`/plugins/platforms
./OpenGLUnderQML
我的 bundle 内容:
lib
OpenGLUnderQML (the executable)
plugins
qml
qt.conf
startapp.sh (the script above)
lib
, plugins
,和qml
完全从 QTDIR 复制(约 500 MB),因此不应遗漏任何库或插件。
最佳答案
我遇到了一个非常相似的问题,并且有相同的错误消息。首先,通过打开调试一些
export QT_DEBUG_PLUGINS=1
并重新运行应用程序。对我来说,这揭示了以下内容:
“无法加载库/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:无法打开共享对象文件:没有这样的文件或目录)”
“无法加载库/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:无法打开共享对象文件:没有这样的文件或目录)”
确实,我缺少 libxkbcommon-x11.so.0 和 libxkbcommon-x11.so.0。接下来,从 Linux 命令行使用 dpkg 检查您的体系结构。 (对我来说,命令“arch”给出了不同且无用的结果)
dpkg --print-architecture #result for me: amd64
然后我用 google 搜索“libxkbcommon-x11.so.0 ubuntu 18.04 amd64”,同样搜索 libxkbcommon-x11.so.0,它在packages.ubuntu.com 上生成这些软件包。这告诉我,回想起来,毫不奇怪,我缺少名为 libxkbcommon-x11-0 和 libxkbcommon-0 的软件包,并且安装这些软件包将包含所需的文件,但开发版本不会。那么解决办法:
sudo apt-get update
sudo apt-get install libxkbcommon0
sudo apt-get install libxkbcommon-x11-0
关于c++ - 如何修复 'Could not load the Qt platform plugin "xcb“在 ""中,即使它已被发现。”在fixup_bundle宏之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362015/
有谁知道蓝牙设备如何获取范围内可发现设备的设备 ID? 理想情况下,我正在寻找涉及蓝牙协议(protocol)最小实现的最简单解决方案。 一个起点会很好,我只是想创建一个设备,它可以以最小的功耗存储附
我有用于搜索Kibana中特定事件的查询,该查询与其他搜索一起保存,是否可以通过REST调用以编程方式更改它? 最佳答案 正如@Mohammad所说,所有与Kibana相关的元数据都存储在elasti
我正在使用带有这些注释的基本集成测试: @ExtendWith(SpringExtension::class) @SpringBootTest(classes = [SomeApplication::
以下是我的代码 HTML: Hello !! Javascript: $(function() { $('#content .child').click(function() {
我试图避免在每个 GDB session 中输入相同的命令。为此,我遵循了 rust discovery book 中的说明。但是当我通过 cargo run 运行程序时,程序没有像书中提到的那样工作
好的,我记得有一些命令可以放在 settings.py 文件中,这样基本上当您将 django 项目移动到另一个目录时,它就不会启动 foo-bar . 我知道我可以通过在它提到主目录的任何地方设置一
假设我正在制作一份注册表单。现在我希望它突出显示四个字段中的空白字段。现在我可以只执行一堆 if-else 语句,但这将花费很长时间。 假设我有以下代码: Javascript: if($firstn
我试图理解 C++ 中 regex 的逻辑 std::string s ("Ni Ni Ni NI"); std::regex e ("(Ni)"); std::smatch sm; std::re
运行时: vim /tmp/blah :q echo $? 我的退出状态为 1 .这破坏了包括 Git 在内的各种东西。如果我在没有 vimrc 的情况下运行 vim: vim -u NONE /tm
我无法通过“查找”来查找旧文件。我将我的发现链接到一个声明中,所有其他部分都运行良好。这是我所拥有的精简版。它搜索 $path 的目录树,并为找到的每个项目创建仅包含换行符的单独临时文件:所有文件、超
我已经多次看到这个问题,但没有一个答案对我有用。 我的 DotNet Core 应用程序失败 编码: public static void Main(string[] args) {
已解决见编辑 2 你好, 我一直在编写一个 Perl 程序来处理本地(专有)程序的自动升级(对于我工作的公司)。 基本上,它通过 cron 运行,不幸的是有内存泄漏(或类似的东西)。问题是泄漏只发生在
在 icCube 中创建到 Oracle 数据库的连接时,“选择现有数据库表”返回一个空的表列表。 连接很好,我可以查询模式创建 SQL 查询。 最佳答案 用户用作模式名称,但 Oracle 使用大写
我正在使用 VBA 循环遍历两个工作表上的行,如果它们匹配,则将工作表 2 中的行复制到工作表 1 中。 我的代码应该: 打开第二个工作簿 将所有信息复制到新工作表上的原始工作簿中 然后循环遍历原始工
当我尝试同步我的数据库时出现这个奇怪的错误: Unhandled rejection Error: Cyclic dependency found. roles is dependent of its
以编程方式发现 perl 模块具有的所有子例程的最佳方法是什么?这可以是一个模块、一个类(没有@EXPORT)或任何介于两者之间的东西。 编辑:下面的所有方法看起来都可以工作。我可能会在生产中使用 C
如何在“讨论”按钮左侧添加“共享”按钮。我希望该按钮与当前的“讨论”按钮具有相同的样式/颜色。 我从https://atmospherejs.com/joshowens/shareit添加了包 我将
我最近从 Netbeans 切换到 Eclipse,Eclipse 在我的项目中发现了许多 Netbeans 没有的语法错误,我不知道为什么。据可以看出,两个 IDE 都设置为使用 java 1.6。
我必须为我的项目设置一些不接受错误网址的规则。我为此使用正则表达式。 我的网址是“http://some/resource/location”。 此网址的开头、中间或结尾不应留有空格。 例如,这些空格
问题:鉴于作为 VMSS 的一部分启动的 N 个实例,我希望每个 Azure 实例上的应用程序代码能够发现其他对等实例的 IP 地址。我该怎么做? 总体目的是对实例进行集群,以提供主动被动 HA 或保
我是一名优秀的程序员,十分优秀!