Unity 4.6.6p1: il2cpp Undefined symbols for architecture armv7

XCode says:

Undefined symbols for architecture armv7:
  "il2cpp::vm::Method::GetParamCount(MethodInfo const*)", referenced from:
      MethodHasParameters(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_1.o
      MethodHasParameters(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_2.o
      MethodHasParameters(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_3.o
      MethodHasParameters(MethodInfo const*) in Bulk_Assembly-UnityScript_10.o
      MethodHasParameters(MethodInfo const*) in Bulk_Boo.Lang_0.o
      MethodHasParameters(MethodInfo const*) in Bulk_Generics_6.o
      MethodHasParameters(MethodInfo const*) in Bulk_mscorlib_7.o
      ...
  "il2cpp::vm::Thread::MemoryBarrier()", referenced from:
      il2cpp_codegen_memory_barrier() in Bulk_Mono.Security_0.o
      il2cpp_codegen_memory_barrier() in Bulk_mscorlib_1.o
      il2cpp_codegen_memory_barrier() in Bulk_mscorlib_5.o
      il2cpp_codegen_memory_barrier() in Bulk_UnityEngine_2.o
  "il2cpp::vm::Runtime::GetInterfaceInvokeData(unsigned int, TypeInfo*, void*)", referenced from:
      InterfaceFuncInvoker0<Object_t*>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_0.o
      InterfaceFuncInvoker0<bool>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_0.o
      InterfaceFuncInvoker0<Material_t102*>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_3.o
      InterfaceFuncInvoker0<Vector3U5BU5D_t440*>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_3.o
      InterfaceFuncInvoker0<Texture_t330*>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_3.o
      InterfaceFuncInvoker0<Vector2U5BU5D_t114*>::Invoke(unsigned int, TypeInfo*, void*) in Bulk_Assembly-CSharp-firstpass_3.o
      InterfaceActionInvoker1<Color_t104>::Invoke(unsigned int, TypeInfo*, void*, Color_t104) in Bulk_Assembly-CSharp-firstpass_3.o
      ...
  "il2cpp::vm::MetadataCache::Register(Il2CppCodeRegistration const*, Il2CppMetadataRegistration const*)", referenced from:
      il2cpp_codegen_register(Il2CppCodeRegistration const*, Il2CppMetadataRegistration const*) in Il2CppMethodTable.o
  "il2cpp::vm::Runtime::GetVirtualInvokeData(unsigned int, void*)", referenced from:
      VirtActionInvoker2<int, EventCallbackPackage_t41*>::Invoke(unsigned int, void*, int, EventCallbackPackage_t41*) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtActionInvoker2<int, BankCallbackPackage_t43*>::Invoke(unsigned int, void*, int, BankCallbackPackage_t43*) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtFuncInvoker2<bool, int, EventCallbackPackage_t41**>::Invoke(unsigned int, void*, int, EventCallbackPackage_t41**) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtActionInvoker5<int, int, unsigned int, IntPtr_t, String_t*>::Invoke(unsigned int, void*, int, int, unsigned int, IntPtr_t, String_t*) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtFuncInvoker2<bool, int, BankCallbackPackage_t43**>::Invoke(unsigned int, void*, int, BankCallbackPackage_t43**) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtActionInvoker4<unsigned int, int, unsigned int, Object_t*>::Invoke(unsigned int, void*, unsigned int, int, unsigned int, Object_t*) in Bulk_Assembly-CSharp-firstpass_0.o
      VirtActionInvoker3<Object_t*, int, Object_t*>::Invoke(unsigned int, void*, Object_t*, int, Object_t*) in Bulk_Assembly-CSharp-firstpass_0.o
      ...
  "il2cpp::vm::Method::IsInstance(MethodInfo const*)", referenced from:
      MethodIsStatic(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_0.o
      MethodIsStatic(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_1.o
      MethodIsStatic(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_2.o
      MethodIsStatic(MethodInfo const*) in Bulk_Assembly-CSharp-firstpass_3.o
      MethodIsStatic(MethodInfo const*) in Bulk_Assembly-UnityScript_10.o
      MethodIsStatic(MethodInfo const*) in Bulk_Boo.Lang_0.o
      MethodIsStatic(MethodInfo const*) in Bulk_Generics_0.o
      ...
  "il2cpp::vm::MetadataCache::GetMethodInfoFromIndex(int)", referenced from:
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-Boo_0.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-CSharp-firstpass_0.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-CSharp-firstpass_1.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-CSharp-firstpass_2.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-CSharp-firstpass_3.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-CSharp_0.o
      il2cpp_codegen_method_info_from_index(int) in Bulk_Assembly-UnityScript-firstpass_0.o
      ...
  "il2cpp::vm::MetadataCache::GetIl2CppTypeFromIndex(int)", referenced from:
      il2cpp_codegen_type_from_index(int) in Assembly-CSharp-firstpassAttributes.o
      il2cpp_codegen_type_from_index(int) in Assembly-CSharpAttributes.o
      il2cpp_codegen_type_from_index(int) in Assembly-UnityScript-firstpassAttributes.o
      il2cpp_codegen_type_from_index(int) in Assembly-UnityScriptAttributes.o
      il2cpp_codegen_type_from_index(int) in Bulk_Assembly-CSharp-firstpass_0.o
      il2cpp_codegen_type_from_index(int) in Bulk_Assembly-CSharp-firstpass_1.o
      il2cpp_codegen_type_from_index(int) in Bulk_Assembly-CSharp-firstpass_2.o
      ...
  "il2cpp::vm::MetadataCache::GetTypeInfoFromIndex(int)", referenced from:
      il2cpp_codegen_type_info_from_index(int) in Assembly-BooAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Assembly-CSharp-firstpassAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Assembly-CSharpAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Assembly-UnityScript-firstpassAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Assembly-UnityScriptAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Boo.LangAttributes.o
      il2cpp_codegen_type_info_from_index(int) in Bulk_Assembly-Boo_0.o
      ...
  "_UnityCurrentMTLCommandBuffer", referenced from:
      _PresentMTL in MetalHelper.o
ld: symbol(s) not found for architecture armv7

EDIT: submitted bug #703013 (I couldn’t submit a project as part of the bug report, but these missing functions seem pretty simple to test/verify).

@Dreamwriter

If you can add a project to the bug report, we would appreciate it. These symbols do normally exist, so something is really off here, and it is not something that we have seen internally yet. Also, did this project work with an earlier version of Unity? Thanks.

Yeah, it worked with Unity 4.6.4p4 - that’s the build we’re currently using. Note that we are targeting specifically Arm7 for now, rather than Universal, since we have a library we are using that hasn’t been updated to 64-bit yet.

@Dreamwriter

Yes, if you can please submit a bug report with a project, that will help us out. We would definitely like to correct this soon, as it is a regression from a previous release. Thanks.

Hey - I couldn’t submit a project unfortunately, as I had no idea what code was causing the problems and our project is ginormous and requires special tools to build assets, but I just tried Unity 4.6.7p1, and the IL2CPP problems have been fixed! I think some of it might have been problems making 32-bit builds with IL2CPP (we are still working with a 32-bit DLL so can’t switch to ARM64/Universal builds yet).

@Dreamwriter

Thanks for letting us know!