Problem: Unity crashes when loading a native plugin.
Goal: Use Pocketsphinx in Unity - Windows. The libpocketsphinxwrap.dll is the interface for pocketsphinx.dll and sphinxbase.dll.
So far:
I compiled both Sphinxbase and Pocketsphinx projects flawlessly. Then I created a project called libpocketsphinxwrap in Visual Studio which on LINKING, looks for sphinxbase.lib, pocketsphinx.lib. No problems at all, the DLL is built.
In Unity, I add all three plugins, libpocketsphinxwrap.dll, sphinxbase.dll and pocketsphinx.dll. Set them for the right platform (I built all in release/x64 and Windows 8.1 SDK).
During runtime, Unity crashes due to "Access Violation" on dll sphinxbase. Below are the Editor.log and crash.log files:
========== OUTPUTING STACK TRACE ==================
0x00000000378FF725 (pocketsphinx) [c:\users\fgera\development\tools\cmusphinx\pocketsphinx\src\libpocketsphinx\pocketsphinx.c:936] ps_start_utt
0x00007FFEEB981B09 (libpocketsphinxwrap) [c:\users\fgera\development\tools\cmusphinx\libpocketsphinxwrap\src\pocketsphinx.c:1360] CSharp_Pocketsphinx_Decoder_StartUtt
0x000000003801A594 (Mono JIT Code) (wrapper managed-to-native) Pocketsphinx.PocketSphinxPINVOKE:Decoder_StartUtt (System.Runtime.InteropServices.HandleRef)
0x000000003801A43D (Mono JIT Code) [C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Libraries\Pocketsphinx\Wrappers\Decoder.cs:99] Pocketsphinx.Decoder:StartUtt ()
0x0000000038011E75 (Mono JIT Code) [C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Scripts\NPC\NPC Modules\Audio_Listener_Module\NPCAudioListener.cs:226] NPCAudioListener:InitLocalTranscriber ()
0x000000003800BC4A (Mono JIT Code) [C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Scripts\NPC\NPC Modules\Audio_Listener_Module\NPCAudioListener.cs:132] NPCAudioListener:InitializeModule ()
0x0000000038001C67 (Mono JIT Code) [C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Scripts\NPC\NPC Agent\NPCController.cs:192] NPC.NPCController:LoadNPCModules ()
0x000000003800099C (Mono JIT Code) [C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Scripts\NPC\NPC Agent\NPCController.cs:280] NPC.NPCController:Awake ()
0x000000000B5D7392 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x00007FFE91635B63 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
0x00007FFE9158872D (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
0x000000014140A365 (Unity) scripting_method_invoke
0x0000000141402311 (Unity) ScriptingInvocation::Invoke
0x000000014140486E (Unity) ScriptingInvocation::InvokeChecked
0x0000000141159894 (Unity) MonoBehaviour::CallMethodInactive
0x0000000141159DCD (Unity) MonoBehaviour::CallAwake
0x0000000141172C6F (Unity) MonoBehaviour::AddToManager
0x000000014115ACA2 (Unity) MonoBehaviour::AwakeFromLoad
0x0000000141427491 (Unity) AwakeFromLoadQueue::InvokePersistentManagerAwake
0x00000001414301B9 (Unity) AwakeFromLoadQueue::PersistentManagerAwakeFromLoad
0x00000001413C8117 (Unity) LoadSceneOperation::CompleteAwakeSequence
0x00000001413C85FA (Unity) LoadSceneOperation::CompletePreloadManagerLoadSceneEditor
0x00000001413CCE03 (Unity) LoadSceneOperation::IntegrateMainThread
0x00000001413CBCA8 (Unity) PreloadManager::UpdatePreloadingSingleStep
0x00000001413CBE48 (Unity) PreloadManager::WaitForAllAsyncOperationsToComplete
0x00000001406E72C5 (Unity) EditorSceneManager::RestoreSceneBackups
0x000000014012C165 (Unity) Application::EnterPlayMode
0x000000014012D307 (Unity) Application::SetIsPlaying
0x0000000140130B72 (Unity) Application::TickTimer
0x0000000141A87E5D (Unity) MainMessageLoop
0x0000000141A89827 (Unity) WinMain
0x0000000141CEC8BC (Unity) __tmainCRTStartup
0x00007FFEF0772774 (KERNEL32) BaseThreadInitThunk
0x00007FFEF3270D51 (ntdll) RtlUserThreadStart
========== END OF STACKTRACE ===========
error.log
Unity Editor [version: Unity 2017.1.0f3_472613c02cf7]
pocketsphinx.dll caused an Access Violation (0xc0000005)
in module pocketsphinx.dll at 0033:378ff725.
Error occurred at 2017-08-07_153424.
C:\Program Files\Unity\Editor\Unity.exe, run by fgera.
46% memory in use.
16276 MB physical memory [8663 MB free].
19220 MB paging file [9598 MB free].
134217728 MB user address space [134214536 MB free].
Read from location 00000010 caused an access violation.
Context:
RDI: 0x3c4c4c68 RSI: 0x0b5d7290 RAX: 0x66bbca20
RBX: 0x3d1d58e0 RCX: 0x00000000 RDX: 0x7bda7348
RIP: 0x378ff725 RBP: 0x005fd500 SegCs: 0x00000033
EFlags: 0x00010202 RSP: 0x005fd370 SegSs: 0x0000002b
R8: 0x00000000 R9: 0x00000000 R10: 0x3d1c5650
R11: 0xeb981af0 R12: 0x005fdca8 R13: 0x20e367f8
R14: 0x005fdd20 R15: 0x00000000
Bytes at CS:EIP:
48 8b 41 10 48 8b f9 0f b6 90 b8 00 00 00 fe ca
Module 1
C:\Program Files\Unity\Editor\OpenRL_pthread.dll
Image Base: 0x80000000 Image Size: 0x0000f000
File Size: 42496 File Time: 2017-07-07_082120
Module 2
C:\Program Files\Unity\Editor\FreeImage.dll
Image Base: 0x80000000 Image Size: 0x005e0000
File Size: 6125568 File Time: 2017-07-07_082140
Module 3
C:\Users\fgera\Development\Git\Computer- Graphics\Motional.AI\Assets\Libraries\Pocketsphinx\x86_64\sphinxbase.dll
Image Base: 0x80000000 Image Size: 0x0004c000
File Size: 284160 File Time: 2017-08-07_151352
Module 4
C:\Users\fgera\Development\Git\Computer-Graphics\Motional.AI\Assets\Libraries\Pocketsphinx\x86_64\pocketsphinx.dll
Image Base: 0x80000000 Image Size: 0x00041000
File Size: 251904 File Time: 2017-08-07_151540
Module 5
C:\Windows\SYSTEM32\xinput1_3.dll
Image Base: 0x00400000 Image Size: 0x0001e000
File Size: 107368 File Time: 2007-04-04_185422
Module 6
C:\Windows\SYSTEM32\MSVCP100.dll
Image Base: 0x63a40000 Image Size: 0x00098000
File Size: 608080 File Time: 2011-02-20_015156
Module 7
C:\Windows\SYSTEM32\MSVCR100.dll
Image Base: 0x63bc0000 Image Size: 0x000d2000
File Size: 829264 File Time: 2011-02-19_035232
== [end of error.log] ==
Example of a signature definition for the dll
[global::System.Runtime.InteropServices.DllImport("libpocketsphinxwrap", EntryPoint="CSharp_Pocketsphinx_FrontEnd_ProcessUtt")]
public static extern int FrontEnd_ProcessUtt(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2, uint jarg3, global::System.Runtime.InteropServices.HandleRef jarg4);
User contributions licensed under CC BY-SA 3.0