查看完整版本: [-- LLVM完整版(编译QDoc需要) --]

QTCN开发网 -> Qt安装与发布 -> LLVM完整版(编译QDoc需要) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

chaome 2019-07-16 10:36

LLVM完整版(编译QDoc需要)

在新版本的Qt编译时候,提示需要LLVM,然而官方提供的LLVM下载是不完整的,没有包含Qt需要的全部文件。
以下是我自行编译的LLVM程序包,大家可以下载之后直接使用。

链接:https://pan.baidu.com/s/1aLxHfePHJn6ec5fLv9HbNQ 提取码:qxiz
大家可以去里面找LLVM的文件夹。
使用方法:
1、[size=; font-size: 1em,1em]将它下载之后,解压到本地目录。

2、在执行Qt的configure之前,需要先执行以下命令:
set LLVM_INSTALL_DIR=目录(目录是bin、include、lib的上级)。

比如我的设置是:set LLVM_INSTALL_DIR=D:\Backup\llvm\Compiled\8.0\LLVM


其实自己编译也很简单的,这是官方的编译帮助:
https://llvm.org/docs/CMake.html

fsu0413 2019-07-17 15:39
官方源码编译出来的llvm没有libclang_static.lib,导致QDoc只能编译动态的,我看Qt公司自己编译的QDoc都是静态的,不知道怎么编的。

lixinwei 2020-10-06 16:23
fsu0413:官方源码编译出来的llvm没有libclang_static.lib,导致QDoc只能编译动态的,我看Qt公司自己编译的QDoc都是静态的,不知道怎么编的。 (2019-07-17 15:39)

https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-vs2015_32.7z
https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-vs2015_64.7z
https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-mingw_32.7z
https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-mingw_64.7z
这应该就是Qt官方使用的libclang,里面有libclang_static.lib
编译之前需要set QDOC_USE_STATIC_LIBCLANG=1
经测试,使用上面第一个(libclang-release_60-windows-vs2015_32.7z),VS2019,x86,编译Qt5.15.1,可以编译,编译出来的qdoc.exe大小与Qt官方的差不多(41M多)

fsu0413 2020-10-07 07:00
lixinwei:https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-vs2015_32.7z
https://download.qt.io/development_releases/prebuilt/libclang/qt/libclang-release_60-windows-vs2015_64.7z
https://download.qt.io/development_releases/pre .. (2020-10-06 16:23) 

非常感谢,不过我需要的不是编译的成果物,而是编译方法。。。。。。

lixinwei 2020-10-07 14:24
fsu0413:非常感谢,不过我需要的不是编译的成果物,而是编译方法。。。。。。
 (2020-10-07 07:00) 

Qt源码/coin/provisioning/common/windows/libclang.ps1里面有注释:
This is a hacked static build of libclang which requires special handling on the qdoc side.

应该是用很特殊的方法编译的
我也是看了这个文件才知道Qt官方用的libclang是哪里下载的

fsu0413 2020-10-20 20:38
lixinwei:Qt源码/coin/provisioning/common/windows/libclang.ps1里面有注释:
This is a hacked static build of libclang which requires special handling on the qdoc side.
应该是用很特殊的方法编译的
....... (2020-10-07 14:24) 

我就是想知道这个特殊的方法是啥。。。。
既然没有说明,我如果想编译出和这个一摸一样的就得自己调查。。。。。。。。。

lixinwei 2020-10-20 23:40
fsu0413:我就是想知道这个特殊的方法是啥。。。。
既然没有说明,我如果想编译出和这个一摸一样的就得自己调查。。。。。。。。。 (2020-10-20 20:38)

2楼提到的静态编译的llvm6.0应该是用脚本https://code.qt.io/cgit/qtsdk/qtsdk.git/tree/packaging-tools/build_clang_qdoc.py的某个历史版本编译的(比如https://code.qt.io/cgit/qtsdk/qtsdk.git/tree/packaging-tools/build_clang_qdoc.py?id=e71c621f5a06166bec5eafde3efb89c3ac949ae2
关键是这几行:
  1. pack_command = ['lib.exe', '/OUT:' + os.path.join(install_path, 'lib', 'libclang_static.lib')]
    for file in os.listdir(os.path.join(build_path_static, 'lib')):
        if file.endswith('.lib') and file != 'libclang.lib':
            pack_command.append(file)
    bld_utils.runCommand(pack_command, os.path.join(build_path_static, 'lib'), None, environment)

而build_clang_qdoc.py目前的版本没有了相关操作,静态编译出来的clang 10.0和11.0(应该就是https://download.qt.io/development_releases/prebuilt/libclang/qt/目录下的)也没有libclang_static.lib,但是也可以用于qdoc.exe的编译,只需要参照https://codereview.qt-project.org/c/qt/qttools/+/313377来修改Qt源码下的qttools\src\qdoc\configure.pri,或者等Qt 5.15.2发布

https://code.qt.io/cgit/qtsdk/qtsdk.git/tree/packaging-tools目录下还有很多用于编译、打包的脚本

fsu0413 2020-10-21 12:26
lixinwei:2楼提到的静态编译的llvm6.0应该是用脚本https://code.qt.io/cgit/qtsdk/qtsdk.git/tree/packaging-tools/build_clang_qdoc.py的某个历史版本编译的(比如https://code.qt.io/cgit/qtsdk/qtsdk.git/tree/packaging-tools/build_clang_qdoc.py?id=e71c621f5a06166bec5eafde3efb89c .. (2020-10-20 23:40) 

好 我看看,非常感谢

hcaihao 2021-12-26 11:21
还要请教大佬们一个问题,我想静态连接openssl,使用参数:configure.bat -debug-and-release -static -opensource -confirm-license -platform win32-msvc -prefix "C:\Qt\6.2.2\msvc2019_x64" -I "E:\Develop\2019\x64\OpenSSL\include" -L "E:\Develop\2019\x64\OpenSSL\lib" -- -D OPENSSL_USE_STATIC_LIBS=ON

一直报:Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY) (found version "1.1.1i")

就算找到了,也是libcrypto64MDd.lib连接的动态lib,我想连接MT的lib,何解?

lixinwei 2021-12-26 17:29
hcaihao:
还要请教大佬们一个问题,我想静态连接openssl,使用参数:configure.bat -debug-and-release -static -opensource -confirm-license -platform win32-msvc -prefix "C:\Qt\6.2.2\msvc2019_x64" -I "E:\Develop\2019\x64\OpenSSL\include" -L "E:\Develop\2019\x64\OpenSSL\lib" -- -D OPENSSL_USE_STATIC_LIBS=ON
一直报:Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY) (found version "1.1.1i")
就算找到了,也是libcrypto64MDd.lib连接的动态lib,我想连接MT的lib,何解?
.......

configure.bat -debug-and-release -static -static-runtime -prefix "C:\Qt\6.2.2\msvc2019_x64" -- -DOPENSSL_ROOT_DIR="E:\Develop\2019\x64\OpenSSL" -DOPENSSL_USE_STATIC_LIBS=ON -DOPENSSL_MSVC_STATIC_RT=ON

Qt 6 不再需要 -opensource -confirm-license
如果要链接MT的lib,Qt 也应该要编译为MT,不要混用MD(d)和MT(d),所以必须加上 -static-runtime
把CMake变量OPENSSL_ROOT_DIR设置为"E:\Develop\2019\x64\OpenSSL",应该就能找到openssl,不建议使用 -I 和 -L
CMake变量OPENSSL_MSVC_STATIC_RT设置为ON或TRUE,就会优先找到MT的lib

hcaihao 2021-12-27 12:43
lixinwei:configure.bat -debug-and-release -static -static-runtime -prefix "C:\Qt\6.2.2\msvc2019_x64" -- -DOPENSSL_ROOT_DIR="E:\Develop\2019\x64\OpenSSL" -DOPENSSL_USE_STATIC_LIBS=ON -DOPENSSL_MSVC_STATIC_RT=ON
Qt 6 不再需要 -opensource -confirm-li .. (2021-12-26 17:29) 

感谢大佬指点,我用你发的这个选项找到mt了,但是到这里就挂了


E:\Qt\qt-everywhere-src-6.2.2\qt3d\src\3rdparty\assimp\src\contrib\pugixml\src\pugixml.hpp(1442): fatal error C1001: Internal compiler error.
(compiler file 'msc1.cpp', line 1687)
To work around this problem, try simplifying or changing the program near the locations listed above.
If possible please provide a repro here: https://developercommunity.visualstudio.com
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
INTERNAL COMPILER ERROR in 'C:\PROGRA~1\MICROS~3\2022\ENTERP~1\VC\Tools\MSVC\1430~1.307\bin\Hostx64\x64\cl.exe'
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information
[9696/14887] Building CXX object qt3d\src\quick3d\imports\...keFiles\quick3danimationplugin.dir\Debug\cmake_pch.cxx.obj
ninja: build stopped: subcommand failed.

lixinwei 2021-12-27 13:21
hcaihao:感谢大佬指点,我用你发的这个选项找到mt了,但是到这里就挂了
E:\Qt\qt-everywhere-src-6.2.2\qt3d\src\3rdparty\assimp\src\contrib\pugixml\src\pugixml.hpp(1442): fatal error C1001: Internal compiler error.
....... (2021-12-27 12:43)

按照 https://codereview.qt-project.org/c/qt/qt3d/+/385667 修改qt3d的源码,按照 https://codereview.qt-project.org/c/qt/qtquick3d/+/385668 修改qtquick3d的源码。如果不需要用到 qt3d 或 qtquick3d,也可以在configure的时加上 -skip qt3d -skip qtquick3d 选项来跳过这两个模块的编译
(注:动态编译时无需修改源码。Qt 6.2.3会修复此bug)

hcaihao 2021-12-27 17:38
lixinwei:
按照 https://codereview.qt-project.org/c/qt/qt3d/+/385667 修改qt3d的源码,按照 https://codereview.qt-project.org/c/qt/qtquick3d/+/385668 修改qtquick3d的源码。如果暂时用不到 qt3d 或 qtquick3d,也可以在configure的时加上用 -skip qt3d -skip qtquick3d 选项

感谢感谢,qt真是步步是坑,这下应该稳了~


查看完整版本: [-- LLVM完整版(编译QDoc需要) --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled