Mono Compile works, but IL2CPP doesn't

Hello Unity,

When I try to compile the project with Mono settings, it works fine.

But changing it to IL2CPP doesn’t, giving the following error:

Win32Exception: ApplicationName=‘C:\Program Files\Unity\Hub\Editor\2019.2.9f1\Editor\Data\il2cpp/build/il2cpp.exe’, CommandLine='–convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile=“unityaot” --compile-cpp --libil2cpp-static --platform=“Android” --architecture=“ARMv7” --configuration=“Release” --outputpath=“C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so” --cachedirectory=“C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Assets..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache” --additional-include-directories=“C:/Program Files/Unity/Hub/Editor/2019.2.9f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\bdwgc/include” --additional-include-directories=“C:/Program Files/Unity/Hub/Editor/2019.2.9f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\libil2cpp/include” --tool-chain-path=“C:/Program Files/Unity/Hub/Editor/2019.2.9f1/Editor/Data/PlaybackEngines/AndroidPlayer/NDK” --profiler-report --map-file-parser=“C:/Program Files/Unity/Hub/Editor/2019.2.9f1/Editor/Data/Tools/MapFileParser/MapFileParser.exe” --directory=“C:/Users/User/Desktop/Projects/CryptoSlot/Crypto Slot/Temp/StagingArea/assets/bin/Data/Managed” --generatedcppdir=“C:/Users/User/Desktop/Projects/CryptoSlot/Crypto Slot/Temp/StagingArea/Il2Cpp/il2cppOutput” ', CurrentDirectory=‘C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\assets\bin\Data\Managed’, Native error= The requested operation requires elevation.

System.Diagnostics.Process.StartWithCreateProcess (System.Diagnostics.ProcessStartInfo startInfo) (at <735c83e43c004ee998f77c68cf8035da>:0)
System.Diagnostics.Process.Start () (at <735c83e43c004ee998f77c68cf8035da>:0)
(wrapper remoting-invoke-with-check) System.Diagnostics.Process.Start()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:104)
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action1[T] setupStartInfo) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71) UnityEditorInternal.IL2CPPBuilder.RunIl2CppWithArguments (System.Collections.Generic.List1[T] arguments, System.Action1[T] setupStartInfo, System.String workingDirectory) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:503) UnityEditorInternal.IL2CPPBuilder.ConvertPlayerDlltoCpp (System.String inputDirectory, System.String outputDirectory, System.String workingDirectory, System.Boolean platformSupportsManagedDebugging) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:484) UnityEditorInternal.IL2CPPBuilder.Run () (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:334) UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String tempFolder, System.String stagingAreaData, UnityEditorInternal.IIl2CppPlatformProvider platformProvider, System.Action1[T] modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:63)
UnityEditor.Android.PostProcessor.Tasks.RunIl2Cpp.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <24d9b022aa584914af833273ea899103>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <24d9b022aa584914af833273ea899103>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <24d9b022aa584914af833273ea899103>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <24d9b022aa584914af833273ea899103>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:281)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

Could you please assist me with what can cause this?

Best regards,

Ivan

Based on the error “The requested operation requires elevation.” your issue seems to be similar to this one Error on build unity 2019.1.9.f1 [SOLVED] .

Thank you for the response JuliusM,

Unfortunately, I tried both possibilities and still get the following error:

Failed running C:\Program Files\Unity\Hub\Editor\2019.2.13f1\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile=“unityaot” --compile-cpp --libil2cpp-static --platform=“Android” --architecture=“ARMv7” --configuration=“Release” --outputpath=“C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so” --cachedirectory=“C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Assets..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache” --additional-include-directories=“C:/Program Files/Unity/Hub/Editor/2019.2.13f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\bdwgc/include” --additional-include-directories=“C:/Program Files/Unity/Hub/Editor/2019.2.13f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\libil2cpp/include” --tool-chain-path=“C:/Users/User/AppData/Local/Android/Sdk/ndk/android-ndk-r16b” --profiler-report --map-file-parser=“C:/Program Files/Unity/Hub/Editor/2019.2.13f1/Editor/Data/Tools/MapFileParser/MapFileParser.exe” --directory=“C:/Users/User/Desktop/Projects/CryptoSlot/Crypto Slot/Temp/StagingArea/assets/bin/Data/Managed” --generatedcppdir=“C:/Users/User/Desktop/Projects/CryptoSlot/Crypto Slot/Temp/StagingArea/Il2Cpp/il2cppOutput”

stdout:
Building libil2cpp.so with AndroidToolChain
Output directory: C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a
Cache directory: C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Library\il2cpp_android_armeabi-v7a\il2cpp_cache
ObjectFiles: 200 of which compiled: 0
Total compilation time: 120 milliseconds.
il2cpp.exe didn’t catch exception: Unity.IL2CPP.Building.BuilderFailedException: C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @“C:\Users\User\AppData\Local\Temp\tmp64CF.tmp” -o “C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_18A5C6D9BB2B6B49BFB4517621CCE827\libil2cpp.so” -shared -Wl,-soname,libil2cpp.so -Wl,–no-undefined -Wl,-z,noexecstack -Wl,–gc-sections -Wl,–build-id --sysroot “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\platforms\android-16\arch-arm” -gcc-toolchain “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64” -target armv7-none-linux-androideabi -Wl,–wrap,sigaction -L “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a” -lgnustl_static -latomic -llog -rdynamic -fuse-ld=gold.exe

C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:426: error: undefined reference to ‘init’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:454: error: undefined reference to ‘logout’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:454: error: undefined reference to ‘logout’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:464: error: undefined reference to ‘activateApp’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:464: error: undefined reference to ‘activateApp’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:488: error: undefined reference to ‘logPurchase’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:518: error: undefined reference to ‘ui’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:540: error: undefined reference to ‘initScreenPosition’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:540: error: undefined reference to ‘initScreenPosition’
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(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\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @“C:\Users\User\AppData\Local\Temp\tmp64CF.tmp” -o “C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_18A5C6D9BB2B6B49BFB4517621CCE827\libil2cpp.so” -shared -Wl,-soname,libil2cpp.so -Wl,–no-undefined -Wl,-z,noexecstack -Wl,–gc-sections -Wl,–build-id --sysroot “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\platforms\android-16\arch-arm” -gcc-toolchain “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64” -target armv7-none-linux-androideabi -Wl,–wrap,sigaction -L “C:\Users\User\AppData\Local\Android\Sdk\ndk\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a” -lgnustl_static -latomic -llog -rdynamic -fuse-ld=gold.exe

C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:426: error: undefined reference to ‘init’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:454: error: undefined reference to ‘logout’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:454: error: undefined reference to ‘logout’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:464: error: undefined reference to ‘activateApp’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:464: error: undefined reference to ‘activateApp’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:488: error: undefined reference to ‘logPurchase’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:518: error: undefined reference to ‘ui’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:540: error: undefined reference to ‘initScreenPosition’
C:\Users\User\Desktop\Projects\CryptoSlot\Crypto Slot\Temp\StagingArea\Il2Cpp\il2cppOutput/Facebook.Unity.Canvas.cpp:540: error: undefined reference to ‘initScreenPosition’
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(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:126)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71) UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List1, Action1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:503) UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(String, String, String, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:484) UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:334) UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:63)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() (at C:/buildslave/unity/build/Editor/Mono/BuildPlayerWindow.cs:122)

Well. the error is different now, so it seems that the solution for the first problem has worked :slight_smile:
Now the errors are

Which means those references are not available when linking Android build. Take a look at your code where they are used. Are they supposed to be used on Android? If they should not be used on Android, wrap that code with

#if !UNITY_ANDROID
#endif

(see Unity - Manual: Conditional compilation in Unity for more information). The difference between mono and il2cpp is that mono only looks for these symbols when they are being used, so if your code logic never gets to them, then everything will work fine even when they are not available. However il2cpp links everything beforehand, so if they are not available, they have to be excluded using the preprocessor directives.