Fails to build with IL2CPP settings.
Unity 2017.4.2f2
ARCore 1.2
Relevant logs (.NET 3.5):
Failed running C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --development-mode --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARMv7" --configuration="Release" --outputpath="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp/StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so" --cachedirectory="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Assets\..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include" --tool-chain-path="C:/Users/bhadriche/AppData/Local/Android/sdk/android-ndk-r13b" --map-file-parser="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\Tools\MapFileParser\MapFileParser.exe" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.SpatialTracking.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.dll" --generatedcppdir="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput"
stdout:
Building libil2cpp.so with AndroidToolChain.
Output directory: C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a
Cache directory: C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache
ObjectFiles: 525 of which compiled: 525
Time Compile: 22514 milliseconds Bulk_mscorlib_8.cpp
Time Compile: 15289 milliseconds Bulk_mscorlib_9.cpp
Time Compile: 12636 milliseconds Bulk_UnityEngine.Networking_0.cpp
Time Compile: 12154 milliseconds Bulk_System_3.cpp
Time Compile: 11106 milliseconds Bulk_System_4.cpp
Time Compile: 11105 milliseconds Bulk_UnityEngine.UI_0.cpp
Time Compile: 11042 milliseconds Bulk_mscorlib_5.cpp
Time Compile: 10976 milliseconds Bulk_Generics_8.cpp
Time Compile: 10925 milliseconds Bulk_System.Xml_3.cpp
Time Compile: 10803 milliseconds Il2CppInvokerTable.cpp
Total compilation time: 100849 milliseconds.
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\bhadriche\AppData\Local\Temp\tmp98E5.tmp" -o "C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_EF4DA812A4DD868AB68E594FBEBFADBE\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\platforms\android-16\arch-arm" -gcc-toolchain "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -Xlinker -Map="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_EF4DA812A4DD868AB68E594FBEBFADBE\libil2cpp.map" -rdynamic -fPIE -pie -fuse-ld=bfd.exe
clang++.exe: warning: argument unused during compilation: '-pie'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\3DA76AD73FD7CE115EAF745ADF0E146C.o: In function `ExternApi_ARCoreARKitIntegration_castUnitySessionToARKitSession_m1571067295':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:39217: undefined reference to `ARCoreARKitIntegration_castUnitySessionToARKitSession'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\3DA76AD73FD7CE115EAF745ADF0E146C.o: In function `ExternApi_ARCoreARKitIntegration_getCurrentFrame_m2681857718':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:39228: undefined reference to `ARCoreARKitIntegration_getCurrentFrame'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(IEnumerable`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[] args)
at il2cpp.Program.Run(String[] args)
at il2cpp.Program.Main(String[] args)
stderr:
Unhandled Exception: Unity.IL2CPP.Building.BuilderFailedException: C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\bhadriche\AppData\Local\Temp\tmp98E5.tmp" -o "C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_EF4DA812A4DD868AB68E594FBEBFADBE\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\platforms\android-16\arch-arm" -gcc-toolchain "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -Xlinker -Map="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_EF4DA812A4DD868AB68E594FBEBFADBE\libil2cpp.map" -rdynamic -fPIE -pie -fuse-ld=bfd.exe
clang++.exe: warning: argument unused during compilation: '-pie'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\3DA76AD73FD7CE115EAF745ADF0E146C.o: In function `ExternApi_ARCoreARKitIntegration_castUnitySessionToARKitSession_m1571067295':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:39217: undefined reference to `ARCoreARKitIntegration_castUnitySessionToARKitSession'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\3DA76AD73FD7CE115EAF745ADF0E146C.o: In function `ExternApi_ARCoreARKitIntegration_getCurrentFrame_m2681857718':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:39228: undefined reference to `ARCoreARKitIntegration_getCurrentFrame'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(IEnumerable`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[] args)
at il2cpp.Program.Run(String[] args)
at il2cpp.Program.Main(String[] args)
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List`1, Action`1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:336)
UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(ICollection`1, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:317)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:160)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:34)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun()
Relevant logs (.NET 4.6):
Failed running C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --development-mode --dotnetprofile="net45" --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARMv7" --configuration="Release" --outputpath="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so" --cachedirectory="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Assets\..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include" --tool-chain-path="C:/Users/bhadriche/AppData/Local/Android/sdk/android-ndk-r13b" --map-file-parser="C:\Program Files\Unity\Hub\Editor\2017.4.2f2\Editor\Data\Tools\MapFileParser\MapFileParser.exe" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.SpatialTracking.dll" --assembly="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.dll" --generatedcppdir="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput"
stdout:
Building libil2cpp.so with AndroidToolChain.
Output directory: C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a
Cache directory: C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache
ObjectFiles: 556 of which compiled: 1
Time Compile: 5090 milliseconds Bulk_Assembly-CSharp_0.cpp
Total compilation time: 6147 milliseconds.
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\bhadriche\AppData\Local\Temp\tmp93E0.tmp" -o "C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_37D95C1A76BF8A52B6B069D003E71EA0\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\platforms\android-16\arch-arm" -gcc-toolchain "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -Xlinker -Map="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_37D95C1A76BF8A52B6B069D003E71EA0\libil2cpp.map" -rdynamic -fPIE -pie -fuse-ld=bfd.exe
clang++.exe: warning: argument unused during compilation: '-pie'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\FE890F1ECD6CCF56991D454F3A99C402.o: In function `ExternApi_ARCoreARKitIntegration_castUnitySessionToARKitSession_m1571067295':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:38573: undefined reference to `ARCoreARKitIntegration_castUnitySessionToARKitSession'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\FE890F1ECD6CCF56991D454F3A99C402.o: In function `ExternApi_ARCoreARKitIntegration_getCurrentFrame_m2681857718':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:38584: undefined reference to `ARCoreARKitIntegration_getCurrentFrame'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(IEnumerable`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[] args)
at il2cpp.Program.Run(String[] args)
at il2cpp.Program.Main(String[] args)
stderr:
Unhandled Exception: Unity.IL2CPP.Building.BuilderFailedException: C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\bhadriche\AppData\Local\Temp\tmp93E0.tmp" -o "C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_37D95C1A76BF8A52B6B069D003E71EA0\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\platforms\android-16\arch-arm" -gcc-toolchain "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "C:\Users\bhadriche\AppData\Local\Android\sdk\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -Xlinker -Map="C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_37D95C1A76BF8A52B6B069D003E71EA0\libil2cpp.map" -rdynamic -fPIE -pie -fuse-ld=bfd.exe
clang++.exe: warning: argument unused during compilation: '-pie'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\FE890F1ECD6CCF56991D454F3A99C402.o: In function `ExternApi_ARCoreARKitIntegration_castUnitySessionToARKitSession_m1571067295':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:38573: undefined reference to `ARCoreARKitIntegration_castUnitySessionToARKitSession'
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\FE890F1ECD6CCF56991D454F3A99C402.o: In function `ExternApi_ARCoreARKitIntegration_getCurrentFrame_m2681857718':
C:\Users\bhadriche\Desktop\arcore-unity-sdk\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_0.cpp:38584: undefined reference to `ARCoreARKitIntegration_getCurrentFrame'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(IEnumerable`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[] args)
at il2cpp.Program.Run(String[] args)
at il2cpp.Program.Main(String[] args)
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List`1, Action`1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:336)
UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(ICollection`1, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:317)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:160)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:34)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun()
It looks like this happens because the C# code is trying to call a native function named ARCoreARKitIntegration_getCurrentFrame, but that function does not exist in a native library in the build. I'm not too familiar with ARCore though.
In general, IL2CPP requires that all native methods used from managed code (via extern static declarations) must be present at link time. Mono does not have this requirement, so that might be a source of the difference.
You're right, the ARCoreARKitIntegration_castUnitySessionToARKitSession and the ARCoreARKitIntegration_castUnitySessionToARKitSession need to be wrapped in a #if UNITY_IOS .
I should have read the logs better, thank you for pointing it out!
Hi, thanks for the bug report. I added it to our internal tracking to fix it for next releases.
Hi, this issue has been fixed in ARCore Unity SDK v1.3.0. Feel free to reopen if you still experience the issue.