记录关于Linux下编译Qt6.2.4遇到的问题(关于LLVM和Clang)

去除不需要的模块

执行 configure 时使用-skip跳过配置不需要的模块。

如下:
./configure -prefix ‘/usr/local/Qt6/’-skip qt3d -skip qt5compat
-prefix 指定最终Qt安装的位置,我不太喜欢直接把这些东西直接安装到系统目录,我宁愿安装到其他地方再写环境变量,好处是不需要这些组件时直接删除即可。

configure 命令执行完毕后注意看输出的日志,把缺的依赖该装的都装上,不然后头该编译的模块可能都没给编译上

最后编译:
cmake --build . --parallel
安装:
cmake --install

编译到qttools等模块报未定义符号错误

如:undefined reference to `typeinfo for clang::ASTConsumer’ 等
原因是这些模块使用Clang编译(即使你配置时指定了编译器为GCC),而且是要基于开启了RTTI功能的LLVM编译的Clang。
这一来问题就麻烦了,因为Clang官方发布的二进制版本都是关闭RTTI后编译的,原因似乎是开启RTTI后会大大拖慢LLVM和Clang的编译速度。 ( 俺 深 有 体 会 ) \color{lightgray}{(俺深有体会)} () ( 关 于 R T T I 可 自 行 百 度 ) \color{lightgray}{(关于RTTI可自行百度)} (RTTI)
要继续编译Qt6.2.4就必须从头编译LLVM和Clang,而开启了RTTI的编译速度是真的慢,make开四线程编译也要差不多4个小时。 ( 至 少 我 的 机 器 是 这 样 ) \color{lightgray}{(至少我的机器是这样)} ()
而编译LLVM和Clang也得注意一些问题,接下来细嗦

编译LLVM和Clang的注意

编译步骤(LLVM和Clang相同)
  1. 在LLVM根目录创建build文件夹
  2. 在build文件夹下执行:
    cmake -DLLVM_ENABLE_RTTI=On -DCMAKE_BUILD_TYPE=Release …/
参数解释

参数 -DLLVM_ENABLE_RTTI=On
用于在cmake阶段开启LLVM的RTTI功能,默认关闭。 开 启 将 极 度 减 慢 L L V M 的 编 译 速 度 。 \color{gray}{开启将极度减慢LLVM的编译速度。} LLVM
属性 -DCMAKE_BUILD_TYPE=Release
用于指定编译为发布版,我的机器只有6g内存,在编译过程出现了内存耗尽编译进程被系统强制杀掉的情况,参考谷歌后添加此参数成功编译。
估计原来编译的时候会处理很多Debug的东西所以耗内存,如果你的机器内存不那么紧张的话可以不加此参数,不过我推荐加上。

  1. 编译
    make -j4 REQUIRES_RTTI=1

参数 REQUIRES_RTTI=1
用于在make阶段开启RTTI,为确保万无一失我在这里再次开启RTTI,万一cmake没开鸟RTTI俺可不想重新再编译一遍,为避免cmake指定的属性可能没有效,这里再设置一下保险。
参数 -j4
开启4个线程编译,提高编译速度。

  1. 安装
    可更改cmake_install.cmake的CMAKE_INSTALL_PREFIX属性更改安装路径
    最后执行:
    make install
  2. 编译Clang
    按编译LLVM的步骤完整地走一边,一模一样

最后请重新配置并编译Qt

你可能感兴趣的:(问题总结,qt,c++,linux)