缅北地头蛇 2024-02-23 15:56 采纳率: 0%
浏览 17

QT项目在GitLab CI中编译生成可执行文件时遇到的一些问题.

QT项目在GitLab CI中编译生成可执行文件时遇到的一些问题,麻烦帮忙看一下,谢谢。
.gitlab-ci.yml的配置如下


stages:
  - build
 
build_job:
  stage: build
  tags:
    - test-runner
  script:
    - qmake jiazaicesi.pro -spec win32-msvc "CONFIG+=qtquickcompiler"
    - nmake.exe 
  artifacts:
    paths:
      - release/jiazaicesi.exe

在执行的过程中遇到的问题,主要的问题就是一直在报无法打开头文件和库文件。同样的项目代码在QT上一直是可以正常构建生成可执行文件并运行。但通过GitLab CI编译时一直有问题。因为gitlab-runner.exe在当前电脑上搭建,环境都是用的一台电脑,不知道哪里出了问题,后来在命令提示符中运行 qmake jiazaicesi.pro -spec win32-msvc "CONFIG+=qtquickcompiler"和nmake.exe 命令报出的错误都是一样的。
在百度上查到以vs为例,使用vs创建的工程,会自动添加一些引用路径,比如vs创建的一个工程,在项目的属性页面:

img

“包含路径”也就是include的路径,该工程如下
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\atlmfc\include
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\cppwinrt
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um
“库目录”是寻找lib的目录
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x86
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\atlmfc\lib\x86
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\lib\x86
C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x86
C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x86
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86

不知道QT是不是也自动在编译时添加了一些引用路径,但在命令行执行时缺少这些路径,从而导致报错。我通过将QT生成的Makefile.release和命令提示符中执行qmake 命令生成的Makefile.release进行对比发现缺少了一些头文件路径。原来以为nmake生成的过程出了问题,但以这样的情况来看好像时qmake编译的时候出的问题
下面是报错信息
问题一:

img


这个问题我把.rc文件去了。就不在报了。在解决了问题二、问题三后,想用同样的方法解决这个问题,但添加了并未解决,在引用Windows.h使用了全路径,但是又会报出找不到Windows.h里引用的头文件
问题二:

img

将上边提到的缺少的头文件路径在.pro添加解决了这个问题


INCLUDEPATH += \
    "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/ATLMFC/include" \
    "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/include" \
    "C:/Program Files (x86)/Windows Kits/NETFXSDK/4.8/include/um" \
    "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/ucrt" \
    "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared" \
    "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um" \
    "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/winrt" \
    "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/cppwinrt"

问题三:

img

img

img


报错无法打开库文件,也是在.pro文件中添加路径解决了这个问题。


LIBS += -lshell32 -lmsvcprt -lucrt

LIBPATH += \
    "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/x64" \
    "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/lib/x64/uwp" \
    "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64"

虽然通过这样的方式解决了问题,但是过于繁琐,感觉并没有从根本解决这个问题,让人干到抓耳挠腮。后来有了解到vcvarsall.bat,在命令提示符里执行了,有将.pro文件里手动添加的路径删除后,发现并没有解决问题,非常感谢您能看到这里,如果您有好的建议,欢迎您留言评论。

  • 写回答

1条回答 默认 最新

  • GISer Liu 2024-02-23 16:06
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    针对你描述的问题,我会逐一分析并提供解决方案:

    问题一:报错问题 - 无法打开头文件

    你提到移除了 .rc 文件后问题消失了,这可能是因为在该文件中引用了一些无法找到的头文件,导致了这个错误。解决方法是确保所有引用的头文件都在正确的位置,并且项目配置中能够正确地找到它们。

    问题二:缺少头文件路径

    你通过在 .pro 文件中添加了缺少的头文件路径解决了这个问题。这是一种有效的解决方法,确保编译器能够找到所有需要的头文件。

    问题三:无法打开库文件

    你在 .pro 文件中手动添加了库文件路径来解决这个问题。这个做法虽然繁琐,但是确实有效。不过,你提到感觉并没有从根本上解决问题,这可能是因为环境配置还存在一些问题。

    解决思路与建议

    1. 环境配置检查:首先,确保你的编译环境配置正确。比如,确保你的编译器、Qt 版本和相关的 SDK 都正确安装和配置。
    2. 使用环境变量:可以尝试使用系统环境变量来指定头文件和库文件的路径,这样可以避免在 .pro 文件中硬编码路径,使得项目更具移植性。
    3. 检查 GitLab CI 环境:确保 GitLab CI 环境中有足够的权限和配置来访问所需的头文件和库文件。
    4. 细化错误信息:如果问题仍然存在,可以尝试进一步细化错误信息,查看具体是哪些文件无法打开,以便更好地定位和解决问题。

    综上所述,通过检查环境配置、使用环境变量、检查 GitLab CI 等方法,应该能够更彻底地解决你遇到的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月23日

悬赏问题

  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵