无法使用 conan-center 配方中的 libc++ 从源代码构建 QT。 (qglobal.h:45:12:致命错误:找不到“type_traits”文件)

问题描述 投票:0回答:1

我正在尝试使用该配置文件从 conan-center 构建

qt/5.15.2@
包:

[settings]
build_type=Debug
arch=x86_64
arch_build=x86_64
os=Linux
os_build=Linux
compiler=clang
compiler.version=9
compiler.libcxx=libc++
[env]
CC=clang-9
CXX=clang++-9
CXXFLAGS="-v"

输出失败

Performing shadow build...
Preparing build tree...
Creating qmake...
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/qmake/main.cpp:30:
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/qmake/project.h:32:
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/qmake/library/qmakeevaluator.h:36:
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/qmake/library/qmakeparser.h:32:
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/qmake/library/qmake_global.h:32:
In file included from /home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/include/QtCore/qglobal.h:1:
/home/user/conan/qt/5.15.2/my/my/source/qt5/qtbase/include/QtCore/../../src/corelib/global/qglobal.h:45:12: fatal error: 'type_traits' file
      not found
#  include <type_traits>
           ^~~~~~~~~~~~~
1 error generated.

我已经尝试了很多方法来解决它:

  1. -I /usr/lib/llvm-9/include/c++/v1/
    添加到
    ./configure
    。 configure的帮助上说可以接受
    -I
    -D
    -L
    参数
  2. 使用
    INCLUDE
     的值定义 
    INCLUDEPATH
    /usr/lib/llvm-9/include/c++/v1/
  3. 环境变量
  4. 将与 (1) 中相同的内容添加到
    QMAKE_CXXFLAGS
    调用中的
    ./configure
    以上所有方法都不起作用,输出仍然相同

路径

/usr/lib/llvm-9/include/c++/v1/
也包含所有 stdlib 标头和
type_traits
。其他 conan 包构建良好,向编译器添加
-v
选项会显示包含上述路径的包含路径列表。
我还尝试将
-v
添加到
QMAKE_CXXFLAGS
CXXFLAGS
来跟踪包含路径,但它甚至没有改变任何东西
我发现了一些类似的问题,但它们都与我不使用的 android NDK 有关

c++ qt compilation libc++
1个回答
0
投票

我在 Alpine Linux 上从源代码编译 Qt 时遇到了类似的问题。就我而言,原因是传递了错误的拱门进行配置,但它呈现出相同的结果,这些是我修复它所遵循的步骤:

  1. 添加
    -v
    进行配置。这将导致它吐出实际使用的命令(例如
    clang++ -c -o main.o ....
  2. 复制命令(可以选择将其粘贴到控制台填满垃圾后可以轻松检索的位置)并自行运行。这只是为了确保您已获得所有内容,因此您应该获得完全相同的输出。
  3. -###
    添加到此编译命令中。这将导致 clang 吐出“真实”命令,例如
    "/usr/lib/llvm17/bin/clang++" "-cc1" "-triple" "x86_64-alpine-linux-musl" ....
  4. 自己复制/粘贴/运行
  5. that 命令。这是您可以更改的,直到它起作用,然后逆向工程为什么您必须做您所做的事情并在上游修复它。1
就我而言,它实际上说的是

... "-triple" "i386-alpine-linux-musl" ...

,这是不正确的。我把命令行改成用
"-triple" "x86_64-alpine-linux-musl"
来代替。
2然后我拍了拍额头,因为我通过了-platform linux-clang-32
来配置,但正确答案是
-platform linux-clang
。我解决了这个问题,我很开心!
3


1 这是一个主要的调试技巧,适用于多种情况。
2 我之前摸索并看到一个同名文件夹时就知道这可能是正确的答案。
3 正如我继续遇到、挣扎并一次解决另外 100 个错误,直到 configure

 成功完成一样,
然后又花了 3 天进行编译。

© www.soinside.com 2019 - 2024. All rights reserved.