使用 VS2013 x64 或 VS2017 x64 在 Windows 10 上安装 LuaJIT LuaRocks Torch7(在 Torch7 上失败)

Installing LuaJIT LuaRocks Torch7 on Windows 10 with VS2013 x64 or VS2017 x64 (fail at Torch7)

过去 3 天我一直在努力让 Lua 在我的新 Windows 10 笔记本电脑上安装 Torch。阅读了许多有关该主题的堆栈溢出帖子,我开始认为我最好的选择是非常严格地遵循 Siavash Gorji 的说明 - 请参阅:https://libraries.io/github/SiavashGorji/LuaJIT-Luarocks-Torch7.

LuaJIT 和 LuaRocks 安装正常,但 "luarocks install torch" 命令失败(使用 VS2013 x64 或 VS2017 x64 构建 torch7 时失败)。

首先,即使 LuaJIT 和 LuaRocks 都成功构建并且 运行,这是第一个 cmake 输出的内容:

(no source code here, just compiler outputs)

D:\luainstall-64\build>cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%LuaJIT-Luarocks-Torch7_ROOT%\install
-- The C compiler identification is MSVC 18.0.40629.0
-- The CXX compiler identification is MSVC 18.0.40629.0
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The ASM compiler identification is MSVC
-- Found assembler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of void*
-- Check size of void* - done
-- Looking for sin in m
-- Looking for sin in m - not found
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Performing Test LJ_TARGET_X64
-- Performing Test LJ_TARGET_X64 - Success
-- LuaJIT Target: x64
-- LuaJIT target x64
-- Performing Test LJ_ARCH_BITS_64
-- Performing Test LJ_ARCH_BITS_64 - Success
-- Performing Test LJ_HASJIT_1
-- Performing Test LJ_HASJIT_1 - Success
-- Performing Test LJ_HASFFI_1
-- Performing Test LJ_HASFFI_1 - Success
-- Performing Test LJ_DUALNUM_1
-- Performing Test LJ_DUALNUM_1 - Failed
-- Performing Test LJ_ARCH_HASFPU_1
-- Performing Test LJ_ARCH_HASFPU_1 - Success
-- Performing Test LJ_ABI_SOFTFP_1
-- Performing Test LJ_ABI_SOFTFP_1 - Failed
-- Looking for sin in m
-- Looking for sin in m - not found
-- Configuring done
-- Generating done
-- Build files have been written to: D:/luainstall-64/build



And last, when Torch7 build problem occurs, I have this (partial) output (focusing on things that may cause of the problem):

D:\luainstall-64\build>luarocks install torch

D:\luainstall-64\build>rem=rem --[[
Installing https://raw.githubusercontent.com/torch/rocks/master/torch-scm-1.rockspec...
Using https://raw.githubusercontent.com/torch/rocks/master/torch-scm-1.rockspec... switching to 'build' mode
Cloning into 'torch7'...
remote: Enumerating objects: 181, done.
remote: Counting objects: 100% (181/181), done.
remote: Compressing objects: 100% (174/174), done.
Receiving objects: 100% (181/181), 335.48 KiB | 1.00 MiB/s, done.ceiving objects:  98% (178/181)

Resolving deltas: 100% (8/8), done.
cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DLUA=D:/luainstall-64/install/./luajit -DLUALIB=libluajit.lib -DLUA_BINDIR="D:/luainstall-64/install/." -DLUA_INCDIR="D:/luainstall-64/install/include" -DLUA_LIBDIR="D:/luainstall-64/install/." -DLUADIR="D:/luainstall-64/install/luarocks/torch/scm-1/lua" -DLIBDIR="D:/luainstall-64/install/luarocks/torch/scm-1/lib" -DCMAKE_INSTALL_PREFIX="D:/luainstall-64/install/luarocks/torch/scm-1" && nmake


D:\Users\docte\AppData\Local\Temp\luarocks_torch-scm-1-1820\torch7>if -E == -E (cmake.exe  -E make_directory build  )  else (cmake.exe -G "NMake Makefiles"  -DWIN32=1  -E make_directory build )

D:\Users\docte\AppData\Local\Temp\luarocks_torch-scm-1-1820\torch7\build>if .. == -E (cmake.exe  .. -DCMAKE_BUILD_TYPE=Release -DLUA=D:/luainstall-64/install/./luajit -DLUALIB=libluajit.lib -DLUA_BINDIR="D:/luainstall-64/install/." -DLUA_INCDIR="D:/luainstall-64/install/include" -DLUA_LIBDIR="D:/luainstall-64/install/." -DLUADIR="D:/luainstall-64/install/luarocks/torch/scm-1/lua" -DLIBDIR="D:/luainstall-64/install/luarocks/torch/scm-1/lib" -DCMAKE_INSTALL_PREFIX="D:/luainstall-64/install/luarocks/torch/scm-1"  )  else (cmake.exe -G "NMake Makefiles"  -DWIN32=1  .. -DCMAKE_BUILD_TYPE=Release -DLUA=D:/luainstall-64/install/./luajit -DLUALIB=libluajit.lib -DLUA_BINDIR="D:/luainstall-64/install/." -DLUA_INCDIR="D:/luainstall-64/install/include" -DLUA_LIBDIR="D:/luainstall-64/install/." -DLUADIR="D:/luainstall-64/install/luarocks/torch/scm-1/lua" -DLIBDIR="D:/luainstall-64/install/luarocks/torch/scm-1/lib" -DCMAKE_INSTALL_PREFIX="D:/luainstall-64/install/luarocks/torch/scm-1" )
-- The C compiler identification is MSVC 18.0.40629.0
-- The CXX compiler identification is MSVC 18.0.40629.0
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenMP_C: -openmp (found version "2.0")
-- Found OpenMP_CXX: -openmp (found version "2.0")
-- Found OpenMP: TRUE (found version "2.0")
-- Compiling with OpenMP support
CMake Deprecation Warning at lib/TH/CMakeLists.txt:5 (CMAKE_POLICY):
  The OLD behavior for policy CMP0026 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Compiling with OpenMP support
-- Could not find hardware support for NEON on this machine.
-- No OMAP3 processor on this machine.
-- No OMAP4 processor on this machine.
-- Looking for cpuid.h
-- Looking for cpuid.h - not found
-- Performing Test NO_GCC_EBX_FPIC_BUG
-- Performing Test NO_GCC_EBX_FPIC_BUG - Failed
-- Performing Test C_HAS_SSE1_1
-- Performing Test C_HAS_SSE1_1 - Success
-- Performing Test C_HAS_SSE2_1
-- Performing Test C_HAS_SSE2_1 - Success
-- Performing Test C_HAS_SSE3_1
-- Performing Test C_HAS_SSE3_1 - Success
-- Performing Test C_HAS_SSE4_1_1
-- Performing Test C_HAS_SSE4_1_1 - Success
-- Performing Test C_HAS_SSE4_2_1
-- Performing Test C_HAS_SSE4_2_1 - Success
-- Performing Test C_HAS_AVX_1
-- Performing Test C_HAS_AVX_1 - Success
-- Performing Test C_HAS_AVX2_1
-- Performing Test C_HAS_AVX2_1 - Success
-- Performing Test CXX_HAS_SSE1_1
-- Performing Test CXX_HAS_SSE1_1 - Success
-- Performing Test CXX_HAS_SSE2_1
-- Performing Test CXX_HAS_SSE2_1 - Success
-- Performing Test CXX_HAS_SSE3_1
-- Performing Test CXX_HAS_SSE3_1 - Success
-- Performing Test CXX_HAS_SSE4_1_1
-- Performing Test CXX_HAS_SSE4_1_1 - Success
-- Performing Test CXX_HAS_SSE4_2_1
-- Performing Test CXX_HAS_SSE4_2_1 - Success
-- Performing Test CXX_HAS_AVX_1
-- Performing Test CXX_HAS_AVX_1 - Success
-- Performing Test CXX_HAS_AVX2_1
-- Performing Test CXX_HAS_AVX2_1 - Success
-- SSE2 Found
-- SSE3 Found
-- AVX Found
-- AVX2 Found
-- Performing Test HAS_C11_ATOMICS
-- Performing Test HAS_C11_ATOMICS - Failed
-- Performing Test HAS_MSC_ATOMICS
-- Performing Test HAS_MSC_ATOMICS - Success
-- Performing Test HAS_GCC_ATOMICS
-- Performing Test HAS_GCC_ATOMICS - Failed
-- TH_SO_VERSION: 0
-- Atomics: using MSVC intrinsics
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of void*
-- Check size of void* - done
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_sequential - mkl_core]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_sequential - mkl_core]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_sequential - mkl_core]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_sequential - mkl_core]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl - guide - pthread - m]
--   Library mkl: not found
-- MKL library not found
-- Checking for [openblas]
--   Library openblas: BLAS_openblas_LIBRARY-NOTFOUND
-- Checking for [openblas - pthread]
--   Library openblas: BLAS_openblas_LIBRARY-NOTFOUND
-- Checking for [libopenblas]
--   Library libopenblas: BLAS_libopenblas_LIBRARY-NOTFOUND
-- Checking for [goto2 - gfortran]
--   Library goto2: BLAS_goto2_LIBRARY-NOTFOUND
-- Checking for [goto2 - gfortran - pthread]
--   Library goto2: BLAS_goto2_LIBRARY-NOTFOUND
-- Checking for [acml - gfortran]
--   Library acml: BLAS_acml_LIBRARY-NOTFOUND
-- Checking for [Accelerate]
--   Library Accelerate: BLAS_Accelerate_LIBRARY-NOTFOUND
-- Checking for [vecLib]
--   Library vecLib: BLAS_vecLib_LIBRARY-NOTFOUND
-- Checking for [ptf77blas - atlas - gfortran]
--   Library ptf77blas: BLAS_ptf77blas_LIBRARY-NOTFOUND
-- Checking for [blas]
--   Library blas: BLAS_blas_LIBRARY-NOTFOUND
-- Cannot find a library with BLAS API. Not using BLAS.
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_sequential - mkl_core]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_sequential - mkl_core]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_sequential - mkl_core]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_sequential - mkl_core]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - libiomp5md - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl_intel_lp64 - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel_lp64: not found
-- Checking for [mkl_intel - mkl_intel_thread - mkl_core - pthread]
--   Library mkl_intel: not found
-- Checking for [mkl - guide - pthread - m]
--   Library mkl: not found
-- MKL library not found
-- Checking for [openblas]
--   Library openblas: BLAS_openblas_LIBRARY-NOTFOUND
-- Checking for [openblas - pthread]
--   Library openblas: BLAS_openblas_LIBRARY-NOTFOUND
-- Checking for [libopenblas]
--   Library libopenblas: BLAS_libopenblas_LIBRARY-NOTFOUND
-- Checking for [goto2 - gfortran]
--   Library goto2: BLAS_goto2_LIBRARY-NOTFOUND
-- Checking for [goto2 - gfortran - pthread]
--   Library goto2: BLAS_goto2_LIBRARY-NOTFOUND
-- Checking for [acml - gfortran]
--   Library acml: BLAS_acml_LIBRARY-NOTFOUND
-- Checking for [Accelerate]
--   Library Accelerate: BLAS_Accelerate_LIBRARY-NOTFOUND
-- Checking for [vecLib]
--   Library vecLib: BLAS_vecLib_LIBRARY-NOTFOUND
-- Checking for [ptf77blas - atlas - gfortran]
--   Library ptf77blas: BLAS_ptf77blas_LIBRARY-NOTFOUND
-- Checking for [blas]
--   Library blas: BLAS_blas_LIBRARY-NOTFOUND
-- Cannot find a library with BLAS API. Not using BLAS.
-- LAPACK requires BLAS
-- Cannot find a library with LAPACK API. Not using LAPACK.
-- Performing Test C_HAS_THREAD
-- Performing Test C_HAS_THREAD - Success
CMake Deprecation Warning at lib/luaT/CMakeLists.txt:3 (CMAKE_POLICY):
  The OLD behavior for policy CMP0026 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Configuring done
-- Generating done
-- Build files have been written to: D:/Users/docte/AppData/Local/Temp/luarocks_torch-scm-1-1820/torch7/build

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

Scanning dependencies of target TH
[  2%] Building C object lib/TH/CMakeFiles/TH.dir/THGeneral.c.obj
THGeneral.c
[  5%] Building C object lib/TH/CMakeFiles/TH.dir/THHalf.c.obj
THHalf.c
[  7%] Building C object lib/TH/CMakeFiles/TH.dir/THAllocator.c.obj
THAllocator.c
[ 10%] Building C object lib/TH/CMakeFiles/TH.dir/THSize.c.obj
THSize.c
[ 12%] Building C object lib/TH/CMakeFiles/TH.dir/THStorage.c.obj
THStorage.c
D:\Users\docte\AppData\Local\Temp\luarocks_torch-scm-1-1820\torch7\lib\TH\THStorage.c(18) : warning C4244: 'function' : conversion from 'const ptrdiff_t' to 'const long', possible loss of data

Now skipping some compiler warnings ...

d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(100) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(101) : error C2085: 'cpuid' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(101) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(123) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(124) : error C2085: 'detectHostSIMDExtensions' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\generic/simd/simd.h(124) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(4) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(4) : error C2085: 'TH_sigmoid' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(4) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(8) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(8) : error C2085: 'TH_frac' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(8) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(12) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(12) : error C2085: 'TH_rsqrt' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(12) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(16) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(16) : error C2085: 'TH_lerp' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(16) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(20) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(20) : error C2085: 'TH_sigmoidf' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(20) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(24) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(24) : error C2085: 'TH_fracf' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(24) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(28) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(28) : error C2085: 'TH_rsqrtf' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(28) : error C2143: syntax error : missing ';' before '{'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(32) : error C2054: expected '(' to follow 'inline'
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(32) : error C2085: 'TH_lerpf' : not in formal parameter list
d:\users\docte\appdata\local\temp\luarocks_torch-scm-1-1820\torch7\lib\th\THMath.h(32) : error C2143: syntax error : missing ';' before '{'

skipping some warnings ...


NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.

Error: Build error: Failed building.

D:\luainstall-64\build>

我知道 Windows 尚未正式支持 Torch7,但如果我们有一个成功的解决方案,那将对社区有很大帮助。这整周我肯定有空才能成功,但我觉得我需要一些 Torch7 依赖项专家的帮助,帮助我专注于我在这个阶段必须做的事情。

如果我们让它在 Windows 10 下工作,无论是使用 MSVC 还是 MinGW,它将在 Lua Windows 社区取得成功!!!

确定 Microsoft Windows 10 个用户。我使用 VS2013 x64 解决了这个惊人的 installation/configuration/re-compilation 难题(使用 VS2017 甚至 VS2019 也很可能成功)。该解决方案基于 Siavash Gorji 的说明 - 请参阅:https://libraries.io/github/SiavashGorji/LuaJIT-Luarocks-Torch7 我一步一步地遵循它,同时对我必须做的每件事都进行了准确和详细的记录。

今天,我必须继续安装可选的,但对执行速度很重要,安装(重新编译)NVIDIA CUDA 软件层(cutorch、cunn、cunnx 和 cudnn 模块)。我将 post 在这里,今天晚些时候这些额外的步骤。

-1) 今天,我确实为我的 VS2013 和 VS2017 安装安装了完整的英特尔 MKL 库

0) 现在,重启后,这是尝试使用 VS2013 x64 本机工具命令提示符

成功安装 LuaJIT-Luarocks-Torch7

0.5) 要让这次检测到英特尔 MKL 库,请为此 VS2013 x64 本机工具命令提示符设置环境变量 由 https://software.intel.com/en-us/mkl-windows-developer-guide-setting-environment-variables 指定 和英特尔 MKL 库安装说明位于 https://software.intel.com/en-us/mkl/choose-download/windows

cd "D:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019\windows\mkl\bin"
d:
mklvars.bat intel64

1) 然后,我们re-build LuaJIT-Luarocks(希望这次它能看到Intel MKL Library):

cd D:\luainstall-64\build
d:
cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%LuaJIT-Luarocks-Torch7_ROOT%\install
nmake
cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%LuaJIT-Luarocks-Torch7_ROOT%\install -P cmake_install.cmake

2) rocks cwrap 和路径已安装,因此继续尝试安装 luarocks install torch

luarocks list

luarocks install torch

但是,"luarocks install torch" returns 错误,以 "inline" 开头未定义, inline 是 c99 关键字,MSVC 尚未(完全)支持 c99(参考 http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx)。

我们可以定义:

-Dinline=__inline

这样做:

cd D:\luainstall-64\install\luarocks
d:
luarocks download torch

edit rockspec file D:\luainstall-64\install\luarocks\torch-scm-1.rockspec
add -Dinline=__inline (let's say after "cmake -E make_directory build && cd build && cmake .. " and before "-DCMAKE_BUILD_TYPE=Release -DLUA=$(LUA) -DLUALIB=$(LUALIB) -DLUA_BINDIR="$(LUA_BINDIR)" -DLUA_INCDIR="$(LUA_INCDIR)" -DLUA_LIBDIR="$(LUA_LIBDIR)" -DLUADIR="$(LUADIR)" -DLIBDIR="$(LIBDIR)" -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE)")
luarocks unpack torch-scm-1.rockspec
cd torch-scm-1\torch7
edit CMakeLists.txt

所以 "Flags when using MSVC" 部分看起来像这样:

# Flags
# When using MSVC
IF(MSVC)
  # we want to respect the standard, and we are bored of those **** .
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE=1)
  # spi, begin
  # "luarocks install torch" returns error, starting with "inline" not being defined,
  # inline is a c99 keyword and c99 is not yet (fully) supported with MSVC (ref. http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx).
  ADD_DEFINITIONS(-Dinline=__inline)
  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE")
  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE")
  # spi, end
ENDIF(MSVC)

现在,准备使用:

构建
luarocks make ..\..\torch-scm-1.rockspec

"luarocks torch install" 终于成功了!!!

为了测试 torch 安装,我们可以通过以下方式在常规命令提示符上创建并显示随机初始化的 2x3x4 张量:

luajit
require "torch"
print(torch.Tensor(2,3,4))

有效!!!

最后,将 Torch_DIR 设置为 LuaJIT-Luarocks-Torch7_ROOT%\share\cmake\torch 目录的环境变量:

setx Torch_DIR %LuaJIT-Luarocks-Torch7_ROOT%\share\cmake\torch
(for me, I edit the system environment variables from the controlpanel, adding Torch_DIR D:\luainstall-64\share\cmake\torch)

因此,我必须关闭 VS2013 x64 本机工具命令提示符 和 re-open 又是一个新的 VS2013 x64 本机工具命令提示符

cd "D:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019\windows\mkl\bin"
d:
mklvars.bat intel64

现在,安装手电筒模块:

当您在 Unix 环境中安装 torch 时,它会自动安装 "lots of nice goodies"。在下一节中,我们尝试使用 luarocks 安装程序一个一个地安装它们(即它们中的大部分)。尝试按照此处显示的相同顺序安装它们。要在 Windows 上安装一些包含 C 代码的 lua/torch 模块,我们需要对它们进行一些更改(因为我们基本上是从 Linux 移植它们)。您可以在 "%LuaJIT-Luarocks-Torch7_ROOT% 的额外文件夹中找到所有此类编辑模块。要安装这些,我们将使用 luarocks 本地安装功能(即使用 "luarocks make" 而不是 "luarocks install").如下所示,我们只需要将NTCP cd到各个模块的主目录,运行 "luarocks make path-to-module-rockspec-file".

luarocks install luafilesystem
luarocks install penlight

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\lua-cjson
(for me, cd D:\luainstall-64\extra\lua-cjson)
luarocks make lua-cjson-2.1devel-1.rockspec

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\luaffifb
(for me, cd D:\luainstall-64\extra\luaffifb)
luarocks make luaffi-scm-1.rockspec

luarocks install sundown
luarocks install dok

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\sys
(for me, cd D:\luainstall-64\extra\sys)
luarocks make sys-1.1-0.rockspec

luarocks install xlua

但是"luarocks install nn"没有通过,需要luarocks下载,luarocks unpack和luarocks make:

cd D:\luainstall-64\install\luarocks
d:
luarocks download nn
edit rockspec file D:\luainstall-64\install\luarocks\nn-scm-1.rockspec
add -Dinline=__inline
luarocks unpack nn-scm-1.rockspec
cd nn-scm-1\nn
edit CMakeLists.txt

所以 "Flags when using MSVC" 部分看起来像这样:

# Flags
# When using MSVC
IF(MSVC)
  # we want to respect the standard, and we are bored of those **** .
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE=1)
  # spi, begin
  # "luarocks install nn" returns error, starting with "inline" not being defined,
  # inline is a c99 keyword and c99 is not yet (fully) supported with MSVC (ref. http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx).
  ADD_DEFINITIONS(-Dinline=__inline)
  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE")
  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE")
  # spi, end
ENDIF(MSVC)

现在,准备使用:

构建
rename D:\luainstall-64\install\luarocks\nn nn-backup
luarocks make ..\..\nn-scm-1.rockspec

构建 nn 失败,因为

d:\luainstall-64\install\luarocks\nn-scm-1\nn\lib\thnn\generic/FeatureLPPooling.c(214) : error C2143: syntax error : missing ';' before 'type'
unsigned type not supported in openmp 2.0 (which is the version msvc 2013 supports), 
so, for 2 blocks of code in FeatureLPPooling.c, I replaced the type size_t by long (within the 2 pragma omp parallel for blocks of code)
also, not declaring any counter variables within for statement (within the pragma omp parallel for here below, 
moving counter variables declaration before each for loop

正在重试构建 nn

cd D:\luainstall-64\install\luarocks\nn-scm-1\nn
d:
luarocks make ..\..\nn-scm-1.rockspec

构建成功!!!

luarocks install graph
luarocks install nngraph

但是"luarocks install image"没有通过 -- 无法找到 JPEG(缺少:JPEG_LIBRARY JPEG_INCLUDE_DIR) -- 找不到 ZLIB(缺少:ZLIB_LIBRARY ZLIB_INCLUDE_DIR) -- 找不到 PNG(缺少:PNG_LIBRARY PNG_PNG_INCLUDE_DIR) 所以,请参阅 https://devblogs.microsoft.com/cppblog/vcpkg-a-tool-to-acquire-and-build-c-open-source-libraries-on-windows/

Clone from GitHub: git clone https://github.com/Microsoft/vcpkg
Run the bootstrap script in the vcpkg folder:
D:\vcpkg> .\bootstrap-vcpkg.bat
d:\vcpkg>vcpkg integrate install

为此 vcpkg 根应用了 user-wide 集成。

d:\vcpkg>vcpkg install openjpeg:x64-windows
d:\vcpkg>vcpkg install zlib:x64-windows

zlib 安装没有成功

vcpkg update

重试 zlib 安装

d:\vcpkg>vcpkg install zlib:x64-windows

zlib 安装成功

d:\vcpkg>vcpkg install libpng:x64-windows

libpng 安装没有成功 重试

d:\vcpkg>vcpkg install libpng:x64-windows

libpng 安装成功

现在,重试安装 "luarocks install image"

luarocks install image

没有通过 -- 无法找到 JPEG(缺少:JPEG_LIBRARY JPEG_INCLUDE_DIR) -- 找不到 ZLIB(缺少:ZLIB_LIBRARY ZLIB_INCLUDE_DIR) -- 找不到 PNG(缺少:PNG_LIBRARY PNG_PNG_INCLUDE_DIR) 设置以下 6 个环境变量:

JPEG_LIBRARY D:\vcpkg\packages\openjpeg_x64-windows\lib
JPEG_INCLUDE_DIR D:\vcpkg\packages\openjpeg_x64-windows\include
ZLIB_LIBRARY D:\vcpkg\packages\zlib_x64-windows\lib
ZLIB_INCLUDE_DIR D:\vcpkg\packages\zlib_x64-windows\include
PNG_LIBRARY D:\vcpkg\packages\libpng_x64-windows\lib
PNG_PNG_INCLUDE_DIR D:\vcpkg\packages\libpng_x64-windows\include

(对我来说,我从控制面板编辑系统环境变量) 因此,我必须关闭 VS2013 x64 本机工具命令提示符 和 re-open 又是一个新的 VS2013 x64 本机工具命令提示符

cd "D:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019\windows\mkl\bin"
d:
mklvars.bat intel64
cd D:\luainstall-64\install\luarocks
d:

现在,重试安装 "luarocks install image"

luarocks install image

(2019 年 7 月 25 日,凌晨 12 点 56 分)"luarocks install image" 仍然没有看到 jpeg、zlib 和 png 库

所以,"luarocks install image"没有通过,需要luarocks下载,luarocks unpack和luarocks make:

cd D:\luainstall-64\install\luarocks
d:
luarocks download image
edit rockspec file D:\luainstall-64\install\luarocks\image-1.1.alpha-0.rockspec

将此定义添加到 cmake 命令:

"-DCMAKE_TOOLCHAIN_FILE=d:/vcpkg/scripts/buildsystems/vcpkg.cmake"
i.e. cmake -DCMAKE_TOOLCHAIN_FILE=d:/vcpkg/scripts/buildsystems/vcpkg.cmake
add also -Dinline=__inline to this cmake command
also add -DJPEG_LIBRARY=D:/vcpkg/packages/openjpeg_x64-windows/lib
along with -DJPEG_INCLUDE_DIR=D:/vcpkg/packages/openjpeg_x64-windows/include
luarocks unpack image-1.1.alpha-0.rockspec
cd image-1.1.alpha-0/image
edit CMakeLists.txt

在顶部,在 FIND_PACKAGE 语句之后,添加此行

ADD_DEFINITIONS(-Dinline=__inline)

现在,准备使用:

构建
rename D:\luainstall-64\install\luarocks\image image-backup
luarocks make ..\..\image-1.1.alpha-0.rockspec

这次构建成功了,但是还是没有找到jpeg库 所以,在顶部,在 FIND_PACKAGE 语句和前面的

之后
ADD_DEFINITIONS(-Dinline=__inline) statement ...

添加这一行

ADD_DEFINITIONS(-DJPEG_LIBRARY="D:/vcpkg/packages/openjpeg_x64-windows/lib")

添加这一行

ADD_DEFINITIONS(-DJPEG_INCLUDE_DIR="D:/vcpkg/packages/openjpeg_x64-windows/include")

现在,准备再次构建使用:

luarocks make ..\..\image-1.1.alpha-0.rockspec

ok,这次代码正在寻找不在 openjpeg 库中的 header jpeglib.h 在撰写本文时,microsoft vcpkg 无法安装 libjpeg,也无法成功安装 libjpeg-turbo 所以,我直接从 https://sourceforge.net/projects/libjpeg-turbo/files/2.0.0/libjpeg-turbo-2.0.0-vc64.exe/download 下载 libjpeg-turbo 并安装它并修改(再次编辑)我的 libjpeg 相关环境变量(使用控制面板环境变量编辑器)

JPEG_LIBRARY D:\libjpeg-turbo64\lib
JPEG_INCLUDE_DIR D:\libjpeg-turbo64\include

再次编辑rockspec文件

edit D:\luainstall-64\install\luarocks\image-1.1.alpha-0.rockspec

并修改(更改)libjpeg 相关定义,以确保 libjpeg-turbo 的文件夹的新路径带有正斜杠以确保安全

-DJPEG_LIBRARY=D:/libjpeg-turbo64/lib/jpeg.lib 
-DJPEG_LIBRARY2=D:/libjpeg-turbo64/lib/turbojpeg.lib 
-DJPEG_INCLUDE_DIR=D:/libjpeg-turbo64/include

现在,我们再来一次

cd D:\luainstall-64\install\luarocks
d:
luarocks unpack image-1.1.alpha-0.rockspec
cd image-1.1.alpha-0/image
edit CMakeLists.txt

在顶部,在 FIND_PACKAGE 语句之后,添加此行

ADD_DEFINITIONS(-Dinline=__inline)

添加这一行

ADD_DEFINITIONS(-DJPEG_LIBRARY="D:/libjpeg-turbo64/lib/jpeg.lib")

添加这一行

ADD_DEFINITIONS(-DJPEG_LIBRARY2="D:/libjpeg-turbo64/lib/turbojpeg.lib")

添加这一行

ADD_DEFINITIONS(-DJPEG_INCLUDE_DIR="D:/libjpeg-turbo64/include")

并在 "if (JPEG_FOUND)" 块中,替换下面的 2 行

替换

SET(CMAKE_REQUIRED_LIBRARIES "${JPEG_LIBRARY}")

SET(CMAKE_REQUIRED_LIBRARIES "${JPEG_LIBRARY} ${JPEG_LIBRARY2}")

并替换

TARGET_LINK_LIBRARIES(jpeg luaT TH ${JPEG_LIBRARIES})

TARGET_LINK_LIBRARIES(jpeg luaT TH ${JPEG_LIBRARIES} ${JPEG_LIBRARY} ${JPEG_LIBRARY2})

现在,准备再次构建使用:

luarocks make ..\..\image-1.1.alpha-0.rockspec

cd D:\luainstall-64\install\luarocks
d:
luarocks install optim
luarocks install gnuplot
luarocks install env

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\nnx
luarocks make nnx-0.1-1.rockspec

luarocks install graphicsmagick
luarocks install argcheck
luarocks install fftw3

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\torch-signal
luarocks make ./rocks/signal-scm-1.rockspec



luarocks install class
luarocks install rational
luarocks install cairo

cd %LuaJIT-Luarocks-Torch7_ROOT%\extra\luasocket
luarocks make ./rockspec/luasocket-3.0rc2-1.rockspec

OK,至此成功

已找到完整解决方案的第一部分!

如果你们中的一些人想要重现这一点,请参阅下面的参考部分,了解我是如何走到今天这一步的。

干杯,

斯蒂芬

供参考:(前一天,我开始做这些步骤)

1) 安装(windows 64 位)

我选择安装在:

D:\luainstall-64

设置环境变量:

LuaJIT-Luarocks-Torch7_ROOT D:\luainstall-64 

开启 Windows - 在适当的环境下使用命令提示符(我使用 VS2013 x64 本机工具命令提示符)

cd %LuaJIT-Luarocks-Torch7_ROOT%\..
git clone https://github.com/SiavashGorji/LuaJIT-Luarocks-Torch7.git
cd %LuaJIT-Luarocks-Torch7_ROOT%
mkdir build
cd build

cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%LuaJIT-Luarocks-Torch7_ROOT%\install
nmake
cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%LuaJIT-Luarocks-Torch7_ROOT%\install -P cmake_install.cmake


setx path "%LuaJIT-Luarocks-Torch7_ROOT%\install;%path%"
D:\luainstall-64\install

setx LUA_PATH .\?.lua;C:\Programs\LuaJIT-Luarocks-Torch7\install\lua\?.lua;C:\Programs\LuaJIT-Luarocks-Torch7\install\lua\?\init.lua;
set LUA_PATH .\?.lua;D:\luainstall-64\install\lua\?.lua;D:\luainstall-64\install\lua\?\init.lua;

setx LUA_CPATH .\?.dll;C:\Programs\LuaJIT-Luarocks-Torch7\install\?.dll;C:\Programs\LuaJIT-Luarocks-Torch7\install\loadall.dll
set LUA_CPATH .\?.dll;D:\luainstall-64\install\?.dll;D:\luainstall-64\install\loadall.dll

setx LUA_DEV %LuaJIT-Luarocks-Torch7_ROOT%\install

重要说明: 请注意,在安装目录中,有一个 cmake.cmd 会自动附加带有 -G "NMake Makefiles" 标志的任何 cmake 命令(由 luarocks 调用)。为了让它工作,你应该确保安装目录在 cmake 安装目录之前。 所以,我确实把 D:\luainstall-64\install 放在系统路径的第一位(在 cmake 的路径之前)。

2) Torch7 (windows 64 位)

On Windows - 在适当的环境下使用命令提示符(我使用 VS2013 x64 Native Tools 命令提示符)

luarocks install cwrap

luarocks install paths

luarocks install torch

但是在 luarocks install torch 的某个时候出现错误:

[ 61%] Generating TensorMath.c
NMAKE : fatal error U1077: 'D:\luainstall-64\install\luajit.EXE' : return code '0xc0000005'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.

Error: Build error: Failed building.