我建立內部的Windows容器 C++代碼使用Microsoft Visual C++生成工具2015年微軟的Visual C++與/ MDD產生的Windows容器內破可執行
msbuild /p:Configuration=Debug
基本運行cl.exe
與/MDd
選項,併產生不可執行 - 見下面。
/p:Configuration=Release
使用/MD
並使得完美的可執行文件。
示例代碼hello-world.cxx
:
#include <iostream>
int main()
{
std::cout << "Hello World!";
}
與/MDd
編譯:
> cl.exe /EHsc /MDd hello-world.cxx
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24210 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
hello-world.cxx
Microsoft (R) Incremental Linker Version 14.00.24210.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello-world.exe
hello-world.obj
> echo %ERRORLEVEL%
0
> hello-world.exe
...nothing is printed here...
> echo %ERRORLEVEL%
-1073741515
與/MD
編譯:
> cl.exe /EHsc /MD hello-world.cxx
...
> hello-world.exe
Hello World!
> echo %ERRORLEVEL%
0
這裏是我Dockerfile的相關部分:
FROM microsoft/windowsservercore
...
# Install chocolatey ...
...
# Install Visual C++ Build Tools, as per: https://chocolatey.org/packages/vcbuildtools
RUN choco install -y vcbuildtools -ia "/InstallSelectableItems VisualCppBuildTools_ATLMFC_SDK"
# Add msbuild to PATH
RUN setx /M PATH "%PATH%;C:\Program Files (x86)\MSBuild\14.0\bin"
# Test msbuild can be accessed without path
RUN msbuild -version
正如你可以看到我安裝Visual C++編譯通過巧克力包裝工具2015年。
我讀過的文檔:https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library
所以/MDd
定義_DEBUG
也放置MSVCRTD.lib
成obj文件,沒有MSVCRT.lib
在我的筆記本電腦,我已經安裝了完整的Visual Studio和它建立的罰款。
我比較了MSVCRTD.lib
,我已經安裝在C:\Program Files (x86)\Microsoft Visual Studio 14.0
下,並且在兩個系統上的文件都是一樣的。
困惑......