gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:54:13 31 4
gpt4 key购买 nike

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

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

~/qt-everywhere-opensource-src-5.2.0$ ./configure -help | grep "sysroot"
-extprefix <dir> ... When -sysroot is used, install everything to <dir>,
-sysroot <dir> ...... Sets <dir> as the target compiler's and qmake's sysroot and also sets pkg-config paths.
-no-gcc-sysroot ..... When using -sysroot, it disables the passing of --sysroot to the compiler

~/qt-everywhere-opensource-src-5.2.0$ ./configure -help | grep "prefix"
-prefix <dir> ...... This will install everything relative to <dir>
-extprefix <dir> ... When -sysroot is used, install everything to <dir>,
-hostprefix [dir] .. Tools and libraries needed when developing

所以我用了-prefix之前,它完全按照描述进行。它把所有东西都放在提供的 <dir> 中,然后当我使用 <prefix_dir>/bin/qmake 构建我的应用程序时并将其安装在我的目标平台上,它想在 <prefix_dir>/lib 找到所有共享对象库.

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

现在,如果我的假设是正确的……那么 -extprefix 的意义何在? ?他们是在说如果我同时使用 -sysroot 可以重定向到好的地方和 -extprefix

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

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

最佳答案

这些是构建嵌入式平台时使用的选项。是的,他们是一团乱麻。所以这里只是部分答案:

-前缀

  • 尝试并证明在整个 Qt 安装中使用/usr/lib 而不是/usr/local/lib 或类似的方法
  • 当 Qt 是为它当前运行的平台构建时(典型的桌面平台)

-sysroot/路径

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

-extprefix/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/路径

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

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

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

即当你有:

 $ ls ~/mytarget
lib bin share dev

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

关于linux - Qt 的 sysroot 和前缀选项的实际示例是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540239/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com