夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens向けにVisualStudioでデプロイを行う際にリンカーエラーが発生してデプロイできない問題

本日はHoloLensのトラブルに遭遇したのでトラブルシューティング枠です。

〇発生したトラブル

 今回はUnityでビルドしたアプリをVisualStudioでデプロイしようとしたところ次の画像のようなエラーが発生し、デプロイができない問題が発生しました。

〇エラーコード無し
Unity.IL2CPP.Building.BuilderFailedException: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\ARM\link.exe /out:"D:\UnityProject\(Unityプロジェクト名)\apps\build\obj\il2cppOutputProject\ARM\Release\linkresult_AEFAF55D752BE3C251D31399152902F7\GameAssembly.dll" /ignore:4206 /DEBUG /INCREMENTAL:NO /LARGEADDRESSAWARE /NXCOMPAT /DYNAMICBASE /NOLOGO /TLBID:1 /OPT:REF /OPT:ICF /OPT:LBR /DLL /IGNORE:4104 /NODEFAULTLIB:uuid.lib "Shcore.lib" "WindowsApp.lib" "Crypt32.lib" "Iphlpapi.lib" "C:\Program Files\Unity\Hub\Editor\2020.3.23f1\Editor\Data\PlaybackEngines\MetroSupport\Players\UAP\il2cpp\ARM\Release\baselib.dll.lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\ARM\store" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\arm" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\arm" /APPCONTAINER /SUBSYSTEM:WINDOWS /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:kernel32.lib @"C:\Users\(ユーザー名)\AppData\Local\Temp\tmp478E.tmp" Il2CppOutputProject D:\UnityProject\WLTFirstDemo\apps\Il2CppOutputProject\EXEC  1   
〇LNK1136
LNK1136  �t�@�C���������ł��邩�A�܂��͉��Ă��܂��B  Il2CppOutputProject D:\UnityProject\WLTFirstDemo\apps\Il2CppOutputProject\598804378662D59050486CE8BF645DE6.obj  1   
〇MSB3073
""D:\UnityProject\(Unityプロジェクト名)\apps\Il2CppOutputProject\\IL2CPP\build\deploy\netcoreapp3.1\il2cpp.exe" --libil2cpp-static --compile-cpp -architecture=ARMv7 -configuration=Release -platform=winrt -outputpath="D:\UnityProject\(Unityプロジェクト名)\apps\\build\bin\ARM\Release\GameAssembly.dll" --data-folder="D:\UnityProject\(Unityプロジェクト名)\apps\\build\bin\ARM\Release\\" -cachedirectory="D:\UnityProject\(Unityプロジェクト名)\apps\\build\obj\il2cppOutputProject\ARM\Release\\" -generatedcppdir="D:\UnityProject\(Unityプロジェクト名)\apps\Il2CppOutputProject\\Source"  --baselib-directory="C:\Program Files\Unity\Hub\Editor\2020.3.23f1\Editor\Data\PlaybackEngines\MetroSupport\Players\UAP\il2cpp\ARM\Release" --avoid-dynamic-library-copy --profiler-report --additional-defines=WINDOWS_UWP --additional-defines=UNITY_UWP --additional-defines=UNITY_WSA_10_0 --additional-defines=UNITY_WSA --additional-defines=UNITY_WINRT --additional-defines=PLATFORM_WINRT -dotnetprofile=unityaot -verbose --relative-data-path=Data/il2cpp_data --map-file-parser="D:\UnityProject\(Unityプロジェクト名)\apps\Il2CppOutputProject\\IL2CPP\MapFileParser\MapFileParser.exe"" はコード 4 で終了しました。    Il2CppOutputProject C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets  46  
〇LNK1181
'D:\UnityProject\(Unityプロジェクト名)\apps\build\bin\ARM\Release\GameAssembly.lib' を開けません。 WLTFirstDemo    D:\UnityProject\(Unityプロジェクト名)\apps\(Unityプロジェクト名)\LINK 1   

〇環境

・Untiy2020.3.23f1

・MixedRealityToolkit v2.73

・VisualStudio2019

〇LNKエラーとは?

LNKエラーはドキュメントによると

function のコンパイルされたコードは symbol への参照または呼び出しを行っていますが、リンカーはリンクするライブラリまたはオブジェクト ファイルのいずれにもシンボル定義を見つけることができません。

このエラー メッセージの後に、致命的なエラー LNK1120 が発生します。 エラー LNK1120 を修正するには、最初に LNK2001 エラーと LNK2019 エラーを修正する必要があります。

docs.microsoft.com

とのことですが筆者の経験と体験でまとめるとファイル名に日本語が含まれている場合や、パスが長すぎる問題などで該当のファイルにアクセスできない、またはほかの何らかの理由で定義を見つけることができない場合に発生するようです。

〇問題の解消

HoloLensではARMもしくはARM64のアーキテクチャを使用しますが、今回ARMを指定していたところエラーが発生しました。

ARM64に変更することで無事にデプロイが通りました。

推測ですが、リンカエラーを見てファイルの場所や名前などを確認したのですが、ARM64に変更することでデプロイが通ったため、VisualStudioのコンポーネントもしくはUnityのコードでARMだと引っかかる箇所がある可能性があると予測しました。

 こちらとりあえず回避策としてデプロイできましたが、原因の把握と解消されましたらまた記事にしたいと思います。