Qt 的 sysroot 和前缀选项的实际示例是什么

2024-05-01

我正在查看可以运行的所有选项configureQt 提供的脚本。 (特别是 qt-everywhere-opensource-src-5.2.0)。

经过大量搜索后,我确定这些东西充其量记录很少,所以我希望我能得到一些帮助。当我查看描述时prefix and sysroot配置选项:

〜/qt-everywhere-opensource-src-5.2.0$ ./configure -help | grep “系统根目录”
-ext前缀<dir>...当使用 -sysroot 时,将所有内容安装到<dir>,
-系统根目录<dir>...... 套<dir>作为目标编译器和 qmake 的 sysroot 并设置 pkg-config 路径。
-no-gcc-sysroot ..... 当使用 -sysroot 时,它会禁止将 --sysroot 传递给编译器

〜/qt-everywhere-opensource-src-5.2.0$ ./configure -help | grep“前缀”
-字首<dir>......这将安装相关的所有内容<dir>
-ext前缀<dir>...当使用 -sysroot 时,将所有内容安装到<dir>,
-hostprefix [dir] ..开发时需要的工具和库

所以我用过-prefix之前,它确实按照描述的那样做了。它将一切都放在提供的位置<dir>,然后当我使用构建我的应用程序时<prefix_dir>/bin/qmake并将其安装在我的目标平台上,它想要找到所有共享对象库<prefix_dir>/lib.

我的印象是如果我使用-sysroot它将安装所有东西<sysroot_dir>然后当我在目标平台上安装我的应用程序时,它将搜索/lib。至少我希望这是真的。

现在如果我的假设是正确的...那么还有什么意义-extprefix?他们是说如果我可以重定向到好的地方如果我同时使用-sysroot and -extprefix?

我想使用的原因是什么-no-gcc-sysroot?如果我希望我的 Qt 库安装在“sysroot”,为什么我不想要gcc使用/知道相同的系统根?

对其中一些选项的解释会很好,如果我能得到一些如何正确使用这些选项的实际例子就更好了。


这些是构建嵌入式平台时使用的选项。 是的,他们是一个皇家烂摊子。所以这只是部分答案:

-prefix

  • 对于 Qt 的整个安装,尝试并经过验证的方法是使用 /usr/lib 而不是 /usr/local/lib 或类似的方法
  • Qt 是为当前运行的平台构建的(典型的桌面平台)

-sysroot /路径

  • 打算为未安装在 / 的系统构建 Qt
  • 例如 -sysroot ~/mysystem 其中 ~/myssytem 包含 /lib /bin 等...
  • 将 --sysroot 传递给其他工具,例如 gcc 和 pkg-config,因此它们将在 ~/mysystem/lib 而不是 /lib 中搜索依赖项

-ext 前缀 /b

  • 使用 -sysroot /a 时,实际上并不写入 /a
  • 将 qt 写入 /b 代替
  • 这是为了针对只读系统根进行交叉编译

-no-gcc-sysroot

  • 针对无法在 --sysroot 中找到自己的 crt 的编译器的非常具体的 hack
  • 将 sysroot 传递给 pkgconfig 等,但不传递给 gcc
  • 这样 gcc 将使用 -L/sysroot/lib/ 正确调用,但不会尝试在此处查找隐式路径(crt)。

-主机前缀/路径

  • 当针对与我们当前运行的目标不同的目标进行编译时
  • qmake 将是主机架构(例如 x86),而 qt 本身将是目标架构(比如说arm)
  • 因此,将 qmake 放在 /path 中,而不是 -sysroot 指定的目标系统中。它对目标系统没有任何用处

为了增加混乱:

-R /path

  • 设置链接器运行路径 - 例如 QtGui 找到 QtCore 的地方 - 独立于所有其他选项

在为目标而不是主机进行编译时要使用哪些标志取决于配置中的大量硬编码假设。

通常 -sysroot 加上 -prefix 应该适用于大多数用例。

即当你有:

 $ ls ~/mytarget
 lib bin share dev

你可以只使用 -sysroot ~/mytarget -prefix /

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 的 sysroot 和前缀选项的实际示例是什么 的相关文章

  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 映射文件和链接器文件之间的区别

    链接器生成的映射文件与包含内存段本身的链接器文件有什么区别 链接器 文件是链接器的一组命令 涉及如何在内存中布置所有内容 并由程序员创建 映射 文件是所有内容在内存中位置的列表 由链接器创建
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm

随机推荐