如何使用Visual Studio 14 2015 x64构建OpenEXR 2.2?

问题描述:

我正在使用CMake 3.7.1。我想使用Visual Studio 2015 x64构建OpenEXR 2.2。发布版本包含详细的构建说明:如何使用Visual Studio 14 2015 x64构建OpenEXR 2.2?

  1. Launch a command window, navigate to the IlmBase folder with CMakeLists.txt,and type command: setlocal del /f CMakeCache.txt cmake -DCMAKE_INSTALL_PREFIX= -G "Visual Studio 10 Win64" ..\ilmbase

  2. Navigate to IlmBase folder in Windows Explorer, open ILMBase.sln and build the solution. When it build successfully, right click INSTALL project and build. It will install the output to the path you set up at the previous step.

  3. Go to http://www.zlib.net and download zlib

  4. Launch a command window, navigate to the OpenEXR folder with CMakeLists.txt, and type command: setlocal del /f CMakeCache.txt cmake -DZLIB_ROOT= -DILMBASE_PACKAGE_PREFIX= -DCMAKE_INSTALL_PREFIX= -G "Visual Studio 10 Win64"^ ..\openexr

  5. Navigate to OpenEXR folder in Windows Explorer, open OpenEXR.sln and build the solution. When it build successfully, right click INSTALL project and build. It will install the output to the path you set up at the previous step.

步骤1到2对我没有任何问题。 IlmBase的lib,DLL和头文件被存储在 “建立” 文件夹中:

enter image description here

我执行用于步骤1的说明2:

wget.exe https://github.com/openexr/openexr/archive/v2.2.0.zip -OC:\thirdparty\vs2015\x64\openexr-2.2.0.zip 
7za.exe x C:\thirdparty\vs2015\x64\openexr-2.2.0.zip -oC:\thirdparty\vs2015\x64 
del C:\thirdparty\vs2015\x64\openexr-2.2.0.zip 
C: 
cd C:\thirdparty\vs2015\x64\openexr-2.2.0\IlmBase 
cmake -G"Visual Studio 14 2015 Win64" -HC:\thirdparty\vs2015\x64\openexr-2.2.0 -BC:\build\vs2015\x64\openexr-2.2.0^
setlocal 
del /f CMakeCache.txt 
cmake -DCMAKE_INSTALL_PREFIX="..\ilmbase\build" -G "Visual Studio 14 2015 Win64" ..\ilmbase 
cmake --build . --config Release 
cmake --build . --config Debug 
cmake --build . --target INSTALL 

步骤3(下载和建筑物的zlib -1.2.8)也很容易:

wget.exe http://zlib.net/zlib128.zip -OC:\thirdparty\vs2015\x64\zlib-1.2.8.zip 
7za.exe x C:\thirdparty\vs2015\x64\zlib-1.2.8.zip -oC:\thirdparty\vs2015\x64 
del C:\thirdparty\vs2015\x64\zlib-1.2.8.zip 
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 
cmake -G"Visual Studio 14 2015 Win64" -HC:\thirdparty\vs2015\x64\zlib-1.2.8 -BC:\build\vs2015\x64\zlib-1.2.8 
C: 
cd C:\build\vs2015\x64\zlib-1.2.8 
cmake --build . --config Release 
cmake --build . --config Debug 
mkdir C:\thirdparty\vs2015\x64\zlib-1.2.8\lib 
mkdir C:\thirdparty\vs2015\x64\zlib-1.2.8\bin 
copy Debug\zlibd.dll C:\thirdparty\vs2015\x64\zlib-1.2.8\bin\zlibd.dll 
copy Debug\zlibd.exp C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibd.exp 
copy Debug\zlibd.ilk C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibd.ilk 
copy Debug\zlibd.lib C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibd.lib 
copy Debug\zlibd.pdb C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibd.pdb 
copy Debug\zlibstaticd.lib C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibstaticd.lib 
copy Release\zlib.dll C:\thirdparty\vs2015\x64\zlib-1.2.8\bin\zlib.dll 
copy Release\zlib.exp C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlib.exp 
copy Release\zlib.lib C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlib.lib 
copy Release\zlibstatic.lib C:\thirdparty\vs2015\x64\zlib-1.2.8\lib\zlibstatic.lib 
cd C:\thirdparty\vs2015\x64 
rmdir C:\build\vs2015\x64\zlib-1.2.8 /S /Q 

现在谈到步骤4 + 5。我正在执行以下语句:

cmake -DZLIB_ROOT="C:\thirdparty\vs2015\x64\zlib-1.2.8"^
-DILMBASE_PACKAGE_PREFIX="C:\thirdparty\vs2015\x64\openexr-2.2.0\IlmBase\build"^
-DCMAKE_INSTALL_PREFIX="..\OpenEXR\build"^
-G "Visual Studio 14 2015 Win64"^
..\openexr 

我打开了openexr.sln,并且比尝试构建IlmInf。有一个错误:“cmd.exe的”用代码-1073741515

enter image description here

这里射出的错误日志:

4>------ Build started: Project: IlmImf, Configuration: Debug x64 ------ 
4> Building Custom Rule C:/thirdparty/vs2015/x64/openexr-2.2.0/OpenEXR/IlmImf/CMakeLists.txt 
4> CMake does not need to re-run because C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\CMakeFiles\generate.stamp is up-to-date. 
4> Generating b44ExpLogTable.h 
4>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code -1073741515. 
========== Build: 3 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

我不不明白为什么我得到这个错误。我在这里做错了什么?

BTW:用于构建的zlib和OpenEXR的我的批处理脚本可以在这里找到:https://bitbucket.org/snippets/Vertexwahn/

IlmImf尝试运行b44ExpLogTable.exe需要位于正确的地方Half.dll文件。当将Half.dll等文件复制到正确的位置时,一切正常。

我使用下面的Windows批处理脚本来处理建设的OpenEXR和复制所有的东西到合适的位置:

Build_openexr-2.2.0_Visual工作室14 2015年Win64.cmd

wget.exe https://github.com/openexr/openexr/archive/v2.2.0.zip -OC:\thirdparty\vs2015\x64\openexr-2.2.0.zip 
7za.exe x C:\thirdparty\vs2015\x64\openexr-2.2.0.zip -oC:\thirdparty\vs2015\x64 
del C:\thirdparty\vs2015\x64\openexr-2.2.0.zip 
C: 
cd C:\thirdparty\vs2015\x64\openexr-2.2.0\IlmBase 
cmake -DCMAKE_INSTALL_PREFIX="C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy"^
-G "Visual Studio 14 2015 Win64"^
..\ilmbase 
setlocal 
del /f CMakeCache.txt 
cmake -DCMAKE_INSTALL_PREFIX="..\deploy" -G "Visual Studio 14 2015 Win64" ..\ilmbase 
cmake --build . --config Release 
cmake --build . --config RelWithDebInfo 
cmake --build . --config Debug 
cmake --build . --target INSTALL 
cd C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR 
setlocal 
del /f CMakeCache.txt 
cmake -DZLIB_ROOT="C:\thirdparty\vs2015\x64\zlib-1.2.11"^
-DILMBASE_PACKAGE_PREFIX="C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy"^
-DCMAKE_INSTALL_PREFIX="..\deploy"^
-G "Visual Studio 14 2015 Win64"^
..\openexr 

mkdir C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Half.dll   C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release\Half.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Iex-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release\Iex-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IexMath-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release\IexMath.2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IlmThread-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release\IlmThread-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Imath-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Release\Imath-2_2.dll 

mkdir C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Half.dll   C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo\Half.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Iex-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo\Iex-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IexMath-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo\IexMath.2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IlmThread-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo\IlmThread-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Imath-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\RelWithDebInfo\Imath-2_2.dll 

mkdir C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Half.dll   C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug\Half.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Iex-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug\Iex-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IexMath-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug\IexMath.2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\IlmThread-2_2.dll C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug\IlmThread-2_2.dll 
copy C:\thirdparty\vs2015\x64\openexr-2.2.0\deploy\lib\Imath-2_2.dll  C:\thirdparty\vs2015\x64\openexr-2.2.0\OpenEXR\IlmImf\Debug\Imath-2_2.dll 

cmake --build . --config Release 
cmake --build . --config RelWithDebInfo 
cmake --build . --config Debug 
cmake --build . --target INSTALL 

大厦OpenEXR需要预建zlib版本。我建立的zlib使用下面的脚本:

Build_zlib-1.2.11_Visual工作室14 2015年Win64.cmd

wget.exe http://zlib.net/zlib1211.zip -OC:\thirdparty\vs2015\x64\zlib-1.2.11.zip 
7za.exe x C:\thirdparty\vs2015\x64\zlib-1.2.11.zip -oC:\thirdparty\vs2015\x64 
del C:\thirdparty\vs2015\x64\zlib-1.2.11.zip 
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 
cmake -G"Visual Studio 14 2015 Win64" -HC:\thirdparty\vs2015\x64\zlib-1.2.11 -BC:\thirdparty\vs2015\x64\zlib-1.2.11\build 
C: 
cd C:\thirdparty\vs2015\x64\zlib-1.2.11\build 
cmake --build . --config Debug 
cmake --build . --config Release 
cmake --build . --config RelWithDebInfo 
mkdir C:\thirdparty\vs2015\x64\zlib-1.2.11\lib 
mkdir C:\thirdparty\vs2015\x64\zlib-1.2.11\bin 
copy Debug\zlibd.dll C:\thirdparty\vs2015\x64\zlib-1.2.11\bin\zlibd.dll 
copy Debug\zlibd.exp C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibd.exp 
copy Debug\zlibd.ilk C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibd.ilk 
copy Debug\zlibd.lib C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibd.lib 
copy Debug\zlibd.pdb C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibd.pdb 
copy Debug\zlibstaticd.lib C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibstaticd.lib 
copy Release\zlib.dll C:\thirdparty\vs2015\x64\zlib-1.2.11\bin\zlib.dll 
copy Release\zlib.exp C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlib.exp 
copy Release\zlib.lib C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlib.lib 
copy Release\zlibstatic.lib C:\thirdparty\vs2015\x64\zlib-1.2.11\lib\zlibstatic.lib 
copy zconf.h C:\thirdparty\vs2015\x64\zlib-1.2.11\zconf.h 

您也可以从https://bitbucket.org/Vertexwahn/percdems

+0

但是这是适当的目录? 如果VS位于其他库目录中,VS不能找到它吗? (在我的情况下,它不...)将它复制到可执行文件的目录有助于运行该exe本身,但似乎可执行文件被称为buildstep从其他地方启动 –

+1

@StefanReinhardt我编辑我的帖子到明确适当的目录在哪里。 – Vertexwahn

+0

很酷的感谢脚本,有助于自动化构建过程 –

步骤下载这些脚本来修复错误MSB6006 “cmd.exe”:

  1. 确保y您已经建立了ilmbase.sln解决方案,然后构建“INSTALL”部分ilmbase。结果你会发现lib包括文件夹ilmbase目录。

  2. 打开高级系统设置和你的路径... \ ilmbase-2.2.0 \ lib;到“路径”系统变量的末尾。关闭高级系统设置。

  3. 重新启动Visual Studio和重建openexr.sln