hack のためのネタ帳, etc,,,

レジストリのエントリが不完全らしく、vcvars64.bat を実行しても上手く環境変数が設定出来なかった。
不足していたエントリは以下。ただし、FrameworkVer64 は正しいかどうか怪しい。

forVCVARS64.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\SxS]

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\SxS\VC7]
"15.0"="C:\\Program Files (x86)\\Microsoft Visual Studio\\VS15Preview\\Common7\\IDE\\VC\\"
"FrameworkDir64"="C:\\Windows\\Microsoft.NET\\Framework64"
"FrameworkVer64"="v4.0.30319"

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\SxS\VS7]
"15.0"="C:\\Program Files (x86)\\Microsoft Visual Studio\\VS15Preview\\"
なぜか以下のようにすると、いろいろエラーが出て失敗する。
cmake.exe -G "Visual Studio 14 2015 Win64" .
./CMakeFiles/CMakeError.log を見ると
C:\Microsoft.Cpp.Default.props がないとか、VCTargetsPath とか VCToolsInstallDir がレジストリから取れなかったとか、tracker.exe がないとか言われて失敗している。
まず、Microsoft.Cpp.Default.props は "C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Default.props" にある。VCTargetsPath に "C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\VCTargets" を与えておけばとりあえず .props は拾ってくれたようなのだが、grep してみたところ Microsoft.Cpp.Common.props で VCTargetsPath を元に自動設定されてるっぽい VCToolsInstallDir が上手く設定されない。Microsoft.Cpp.Common.props のロジックから当りを付けてみたところ VCToolsInstallDir_150 に C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\ を入れると解決した。
と言うことで、以下の環境変数を設定した。
set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\VCTargets
set VCToolsInstallDir_150=C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\
tracker.exe については "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\" にあるのに、./Microsoft.Cpp.Redirect.11.targets での指定が、'$(WindowsSdkDir_80A)bin\NETFX 4.0 Tools\Tracker.exe' とかなっているため、以下の Windows SDK をインストールしないと駄目だった。
因みに、以下の 8.1 用の SDK だと、"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools" になってしまうので駄目だったので念のため記しておく。
更に
Link:
  C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\bin\amd64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdCXX.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdCXX.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdCXX.lib" /MACHINE:X64 Debug\CMakeCXXCompilerId.obj
LINK : fatal error LNK1104: cannot open file 'ucrtd.lib' [C:\Users\kou\Desktop\cuda\CostFilterCUDA\CMakeFiles\3.6.1\CompilerIdCXX\CompilerIdCXX.vcxproj]
プロジェクト "C:\Users\kou\Desktop\cuda\CostFilterCUDA\CMakeFiles\3.6.1\CompilerIdCXX\CompilerIdCXX.vcxproj" (既定のターゲット) のビルドが終了しました -- 失敗。
なんてエラーも出てるんだけど、これは、vcvars64.bat で
@if not "%UCRTVersion%" == "" @set LIB=%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64;%LIB%
とか設定されていて
UCRTVersion=10.0.10240.0
UniversalCRTSdkDir=C:\Program Files (x86)\Windows Kits\10\
と言う状態なので、多分以下の SDK のはずなんだけど、なぜかインストールに失敗した。


2016-08-23: 追記
結構端折って書いてたので、ちょっと補足

初期状態としては、
Windows 8 SDK、Windows 8.1 SDK はインストールしたが、
Windows 10 SDK はエラーでインストール出来ない点は昨日のままである。
昨日との違いとしては、
VisualStudio 2013 Community をインストールしている。

vcvarsall.bat は VisualStudio 15 preview 2 の物を呼び、第一引数に amd64 を与えている。
vcvarsall amd64

まず、以下のようにすると、なぜかいろいろエラーが出て失敗する。
C:\Users\kou\Desktop\cuda\CostFilterCUDA>cmake -G "Visual Studio 14 2015 Win64" .
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error in CMakeLists.txt:
  No CMAKE_C_COMPILER could be found.



CMake Error in CMakeLists.txt:
  No CMAKE_CXX_COMPILER could be found.



-- Configuring incomplete, errors occurred!
See also "C:/Users/kou/Desktop/cuda/CostFilterCUDA/CMakeFiles/CMakeOutput.log".
See also "C:/Users/kou/Desktop/cuda/CostFilterCUDA/CMakeFiles/CMakeError.log".
一見 CMAKE_*_COMPILER が見つからないように見えるが、実際には試験コンパイルに失敗しているだけのようだ。

./CMakeFiles/CMakeError.log

見ての通り "C:\Microsoft.Cpp.Default.props" が見つからないのが原因。
".\CMakeFiles\3.6.1\CompilerIdC\CompilerIdC.vcxproj" を見ると、19行目辺りに以下のような記述がある。
...
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
...
Microsoft.Cpp.Default.props は "C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Default.props" にある。VCTargetsPath に "%VCINSTALLDIR%VCTargets" を与えておけばとりあえず .props は拾ってくれたようになった。
しかし、再度 cmake かけると、コマンドプロンプト上の表示は前と同じエラー。エラーログの内容が以下のように変化している。

./CMakeFiles/CMakeError.log

今度は VCToolsInstallDir がレジストリから拾えなかったと言っている模様。

%VCTargetsPath% 以下を grep してみたところ %VCTargetsPath%\Microsoft.Cpp.Common.props の54〜110行に以下のような記述を発見。
...
<VCToolsInstallDir_150 Condition="'$(VCToolsInstallDir_150)' == ''">$(VCTargetsPath)\..\</VCToolsInstallDir_150>
<中略>
<VCToolsInstallDir>$(VCToolsInstallDir_150)</VCToolsInstallDir>
...
これを見ると、VCTargetsPath から自動的に VCToolsInstallDir_150 を設定して、VCToolsInstallDir を設定してくれるように思えるのだが、なぜか上手く行っていない模様。とりあえず、VCToolsInstallDir_150 に "%VCTargetsPath%\..\" を与えた。

ここまでの作業は、昨日と同じなのだが、なぜか、昨日問題になった tracker.exe については何も言われず、ここで、ソリューションファイルが生成出来てしまった。

と言うことで、まとめると、以下の環境変数を設定した。
set VCTargetsPath=%VCINSTALLDIR%VCTargets
set VCToolsInstallDir_150=%VCTargetsPath%\..\
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます