首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在windows docker容器中编译Qt5项目

在windows docker容器中编译Qt5项目
EN

Stack Overflow用户
提问于 2019-06-01 04:50:53
回答 1查看 3.4K关注 0票数 8

我正在使用Qt5 5.12.2设置Docker容器,并使用microsoft visual studio 15编译器msvc2015_64来构建我的项目。然而,在构建时,我得到了一个LNK1112:模块机器类型'x64‘与目标机器类型'X86’冲突错误。

我的第一步是使用Qt Creator生成的相同命令构建Qt5项目:

代码语言:javascript
复制
C:\Qt\5.12.2\msvc2015_64\bin\qmake.exe C:\Users\userA\Desktop\Projects\myproj\app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qtquickcompiler" && C:\Qt\Tools\QtCreator\bin\jom.exe qmake_all
C:\Qt\Tools\QtCreator\bin\jom.exe

这会产生机器类型冲突错误。

我尝试将以下路径添加到我的%path%环境变量中:

代码语言:javascript
复制
C:\Windows\System32
C:\Qt\5.12.2\msvc2015_64\bin
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

已经在我的path环境变量中:

代码语言:javascript
复制
C:\Program Files (x86)\Windows Kits\8.1\bin\x86
C:\Program Files (x86)\Windows Kits\8.1\Windows Perormance Toolkit\

我还尝试在Microsoft Visual Studio14.0中运行.bat文件:

代码语言:javascript
复制
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat

运行.bat文件的输出:

代码语言:javascript
复制
ERROR: Cannot determine the location of the VS Common Tools folder

我已经查找了这个错误,我认为建议将C:\Windows\System32添加到环境变量%path%中。我试过了,但是同样的错误。

我的Dockerfile:

代码语言:javascript
复制
FROM microsoft/windowsservercore:10.0.14393.1884
LABEL Description="Windows Server Core development environment for Qbs with Qt 5.12.2, Chocolatey and various dependencies for testing Qbs modules and functionality"

# Disable crash dialog for release-mode runtimes
RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v Disabled /t REG_DWORD /d 1 /f
RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v DontShowUI /t REG_DWORD /d 1 /f

# Install Qt5 5.12.2
COPY qtifwsilent.qs C:\\qtifwsilent.qs
RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \
    $ErrorActionPreference = 'Stop'; \
    $Wc = New-Object System.Net.WebClient ; \
    $Wc.DownloadFile('http://download.qt.io/archive/qt/5.12/5.12.2/qt-opensource-windows-x86-5.12.2.exe', 'C:\qt.exe') ; \
    Echo 'Downloaded qt-opensource-windows-x86-5.12.2.exe' ; \
    $Env:QT_INSTALL_DIR = 'C:\\Qt' ; \
    Start-Process C:\qt.exe -ArgumentList '--verbose --script C:/qtifwsilent.qs' -NoNewWindow -Wait ; \
    Remove-Item C:\qt.exe -Force ; \
    Remove-Item C:\qtifwsilent.qs -Force
ENV QTDIR C:\\Qt\\5.12.2\\msvc2015
ENV QTDIR64 C:\\Qt\\5.12.2\\msvc2015_64
RUN dir "%QTDIR64%" && dir "%QTDIR64%\bin"

# Install choco for psuedo package manager
RUN @powershell -NoProfile -ExecutionPolicy Bypass -Command \
    $Env:chocolateyVersion = '0.10.8' ; \
    $Env:chocolateyUseWindowsCompression = 'false' ; \
    "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
RUN choco install -y python2 --version 2.7.14 && refreshenv && python --version && pip --version
RUN choco install -y qbs --version 1.9.1 && qbs --version
RUN choco install -y unzip --version 6.0 && unzip -v
RUN choco install -y visualcpp-build-tools --version 14.0.25420.1 && dir "%PROGRAMFILES(X86)%\Microsoft Visual C++ Build Tools"
# RUN choco install -y windows-sdk-10.1
# RUN choco install -y vcredist2008 --version 9.0.30729.6161
# RUN choco install -y vcredist2010
RUN choco install -y zip --version 3.0 && zip -v

# for building the documentation
RUN pip install beautifulsoup4 lxml

My qtifwsilent.qs to setup Qt5包含以下组件:

代码语言:javascript
复制
    widget.deselectAll();
    widget.selectComponent("qt.qt5.5122.win32_msvc2015");
    widget.selectComponent("qt.qt5.5122.win64_msvc2015_64");
    widget.selectComponent("qt.qt5.5122.qtcharts");
    widget.selectComponent("qt.qt5.5122.qtdatavis3d");
    widget.selectComponent("qt.qt5.5122.qtpurchasing");
    widget.selectComponent("qt.qt5.5122.qtvirtualkeyboard");
    widget.selectComponent("qt.qt5.5122.qtwebengine");
    widget.selectComponent("qt.qt5.5122.qtnetworkauth");
    widget.selectComponent("qt.qt5.5122.qtwebglplugin");
    widget.selectComponent("qt.qt5.5122.qtscript");
    widget.selectComponent("qt.tools.vcredist_msvc2015_x86");
    widget.selectComponent("qt.tools.vcredist_msvc2015_x64");

我希望该项目能够构建并生成一个exe文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 01:42:35

我解决了这个问题,所以我只是在这里张贴这篇文章,以供将来参考。

我不得不更新Dockerfile以使用更新版本的servercore以及所需的Windows工具包。我还必须向我的%path%环境变量添加几个路径,如下所示。

代码语言:javascript
复制
FROM mcr.microsoft.com/windows/servercore:ltsc2019
LABEL Description="Windows Server Core development environment for Qbs with Qt 5.12.2, Chocolatey and various dependencies for testing Qbs modules and functionality"

# Disable crash dialog for release-mode runtimes
RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v Disabled /t REG_DWORD /d 1 /f
RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v DontShowUI /t REG_DWORD /d 1 /f

# Install Qt5 5.12.2
COPY qtifwsilent.qs C:\\qtifwsilent.qs
RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \
    $ErrorActionPreference = 'Stop'; \
    $Wc = New-Object System.Net.WebClient ; \
    $Wc.DownloadFile('http://download.qt.io/archive/qt/5.12/5.12.2/qt-opensource-windows-x86-5.12.2.exe', 'C:\qt.exe') ; \
    Echo 'Downloaded qt-opensource-windows-x86-5.12.2.exe' ; \
    $Env:QT_INSTALL_DIR = 'C:\\Qt' ; \
    Start-Process C:\qt.exe -ArgumentList '--verbose --script C:/qtifwsilent.qs' -NoNewWindow -Wait ; \
    Remove-Item C:\qt.exe -Force ; \
    Remove-Item C:\qtifwsilent.qs -Force
ENV QTDIR C:\\Qt\\5.12.2\\msvc2015
ENV QTDIR64 C:\\Qt\\5.12.2\\msvc2015_64
RUN dir "%QTDIR64%" && dir "%QTDIR64%\bin"

# Install choco for psuedo package manager
RUN @powershell -NoProfile -ExecutionPolicy Bypass -Command \
    $Env:chocolateyVersion = '0.10.14' ; \
    $Env:chocolateyUseWindowsCompression = 'false' ; \
    "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
RUN choco install -y python2 --version 2.7.14 && refreshenv && python --version && pip --version
RUN choco install -y qbs && qbs --version
RUN choco install -y unzip --version 6.0 && unzip -v
RUN choco install -y vcbuildtools -ia "/Full"
RUN choco install -y zip --version 3.0 && zip -v
RUN choco install -y cmake
RUN choco install -y windows-sdk-10.1
RUN choco install -y vcredist2008 --version 9.0.30729.6161
RUN choco install -y vcredist2010

# for building the documentation
RUN pip install beautifulsoup4 lxml

WORKDIR C:\\Users\\ContainerUser

对于我使用的环境路径:

代码语言:javascript
复制
set path=%path%;"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC";C:\Qt\5.12.2\msvc2015_64\bin;"C:\Program Files (x86)\Windows Kits\10\bin\x64";"C:\Program Files (x86)\Windows Kits\8.1\bin\x64";C:\Qt\Tools\QtCreator\bin;

# Run this command to setup cl.exe
vcvarsall.bat x86_amd64
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56401595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档