代码之家  ›  专栏  ›  技术社区  ›  Muhammad Faizan Khan

异常:为WebGL生成时,生成WebGL播放器失败

  •  1
  • Muhammad Faizan Khan  · 技术社区  · 6 年前

    margeInto(LibraryManager.library,{
    
        GameObjectHasClicked : function (str){
            window.alert(Pointer_stringify(str));
        },
            Hello: function (){
            window.alert(Pointer_stringify(str));
        },
    
    
    });
    

    using System.Runtime.InteropServices;
    using UnityEngine;
    
    public class SendInfoToBrowserJS : MonoBehaviour {
    
        [DllImport("__Internal")]
        private static extern void GameObjectHasClicked(string pos);
    
        [DllImport("__Internal")]
        private static extern void Hello();
    
    
        private void OnMouseDown()
        {
            string currentPos = this.transform.position.ToString();
            Debug.Log("cube clicked "+ currentPos);
            //#if UNITY_WEBGL
            Hello();
            GameObjectHasClicked(currentPos);
            //#endif
        }
    
    
    }
    

    正如您所看到的,我正在调用两个简单的方法( GameObjectHasClicked Hello )来自C#的jslib,但是

    首先,每当我在编辑器模式下点击游戏对象时,它都会给我错误

    EntryPointNotFoundException: Hello
    SendInfoToBrowserJS.OnMouseDown () (at Assets/Scripts/SendInfoToBrowserJS.cs:29)
    UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)
    

    其次,构建是 信息也是如此。实际上有三种信息:

    Failed running "C:/Program
    Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe"
    "C:/Program
    Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
    @"D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\..\Temp\emcc_arguments.resp"
    
    stdout: stderr:WARNING:root:--separate-asm works best when compiling
    to HTML. Otherwise, you must yourself load the '.asm.js' file that is
    emitted separately, and must do so before loading the main '.js' file.
    [-Wseparate-asm] error: failure to execute js library
    "D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib":
    ReferenceError: margeInto is not defined,,ReferenceError: margeInto is
    not defined    at eval (eval at load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8)),
    <anonymous>:1:1)    at Object.load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
    <anonymous>:178:9)    at JSify (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
    <anonymous>:84:20)    at
    D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib
    (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:208:3)
    at Module._compile (module.js:570:32)    at
    Object.Module._extensions..js (module.js:579:10)    at Module.load
    (module.js:487:32)    at tryModuleLoad (module.js:446:12)    at
    Function.Module._load (module.js:438:3)    at Module.runMain
    (module.js:604:10)preprocessed source (you can run a js engine on this
    to get a clearer error message
    sometimes):=============margeInto(LibraryManager.library,{  GameObjectHasClicked
    : function (str){       window.alert(Pointer_stringify(str));   },      Hello:
    function
    (){     window.alert(Pointer_stringify(str));   },});=============Internal
    compiler error in src/compiler.js! Please raise a bug report at
    https://github.com/kripken/emscripten/issues/ with a log of the build
    and the input files used to run. Exception message: "ReferenceError:
    margeInto is not defined" | ReferenceError: margeInto is not defined  
    at eval (eval at load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8)),
    <anonymous>:1:1)    at Object.load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
    <anonymous>:178:9)    at JSify (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
    <anonymous>:84:20)    at Object.<anonymous> (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:208:3)
    at Module._compile (module.js:570:32)    at
    Object.Module._extensions..js (module.js:579:10)    at Module.load
    (module.js:487:32)    at tryModuleLoad (module.js:446:12)    at
    Function.Module._load (module.js:438:3)    at Module.runMain
    (module.js:604:10)Traceback (most recent call last):   File
    "C:/Program
    Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc",
    line 10, in <module>
        python_selector.run(__file__, profile=True)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\python_selector.py",
    line 43, in run
        sys.exit(run_by_import(filename, main) if on_allowed_version() else run_by_subprocess(filename))   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\python_selector.py",
    line 13, in run_by_import
        return getattr(importlib.import_module(os.path.basename(filename)), main)()  
    File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py",
    line 1611, in run
        final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py",
    line 2009, in emscripten
        call_emscripten(cmdline)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 2340, in _main
        temp_files.run_and_clean(lambda: main(   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\tempfiles.py",
    line 93, in run_and_clean
        return func()   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 2345, in <lambda>
        DEBUG=DEBUG,   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 2251, in main
        temp_files=temp_files, DEBUG=DEBUG)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 99, in emscript
        glue, forwarded_data = compiler_glue(metadata, settings, libraries, compiler_engine, temp_files, DEBUG)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 226, in compiler_glue
        glue, forwarded_data = compile_settings(compiler_engine, settings, libraries, temp_files)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
    line 532, in compile_settings
        cwd=path_from_root('src'), error_limit=300)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\jsrun.py",
    line 132, in run_js
        raise Exception('Expected the command ' + str(command) + ' to finish with return code ' + str(assert_returncode) + ', but it
    returned with code ' + str(proc.returncode) + ' instead! Output: ' +
    str(ret)[:error_limit]) Exception: Expected the command ['C:/Program
    Files/Unity2018.2.10/Editor/Data\\Tools\\nodejs\\node.exe',
    '--stack_size=8192', '--max-old-space-size=4096', 'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\src\\compiler.js',
    'C:\\Users\\User\\AppData\\Local\\Temp\\tmppocs11.txt', 'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Audio.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Cursor.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Eval.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\FileSystem.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Logging.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Profiler.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\SystemInfo.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\UnetWebSocket.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Video.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\WebCam.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\WebGL.js',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\WebRequest.js',
    'D:\\@TLL_Projects\\WebGLAndBroswerJSInteraction\\Assets\\Plugins\\ExternalJSMethod.jslib',
    'C:\ProgramFiles\\Unity2018.2.10\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\src\\library_pthread_stub.js']
    to finish with return code 0, but it returned with code 1 instead!
    Output: // The Module object: Our interface to the outside world. We
    import // and export values on it. There are various ways Module can
    be used: // 1. Not defined. We create it here // 2. A function
    parameter, function(Module) { ..generated code.. } // 3. pre-run
    appended it, var Module = {}; ..generated 
    UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
    

    Exception: Failed building WebGL Player.
    UnityEditor.WebGL.ProgramUtils.StartProgramChecked
    (System.Diagnostics.ProcessStartInfo p) (at
        /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48)
    UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink
    (BuildPostProcessArgs args, Boolean wasmBuild, System.String
    sourceFiles, System.String sourceFilesHash) (at
        /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:425)
    UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild
    (BuildPostProcessArgs args) (at
        /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:474)
    UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess
    (BuildPostProcessArgs args) (at
        /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:937)
    UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess
    (BuildPostProcessArgs args, UnityEditor.BuildProperties&
    outProperties) (at
        C:/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27)
    UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup
    targetGroup, BuildTarget target, System.String installPath,
    System.String companyName, System.String productName, Int32 width,
    Int32 height, BuildOptions options, UnityEditor.RuntimeClassRegistry
    usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at
        C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:287)
    UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
    

    最后一条成功信息是什么

    生成已完成,结果为“成功”

    1 回复  |  直到 4 年前
        1
  •  0
  •   Paul huon    4 年前

    我仔细检查了我的第一个错误

    Failed running "C:/Program
    Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe"
    "C:/Program
    Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
    @"D:@TLL_Projects\WebGLAndBroswerJSInteraction\Assets..\Temp\emcc_arguments.resp"
    
    stdout: stderr:WARNING:root:--separate-asm works best when compiling
    to HTML. Otherwise, you must yourself load the '.asm.js' file that is
    emitted separately, and must do so before loading the main '.js' file.
    [-Wseparate-asm] error: failure to execute js library
    "D:@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib":
    ReferenceError: margeInto is not defined,,ReferenceError: margeInto is
    not defined at eval (eval at load (eval at globalEval (C:\Program . .. . .**so on**
    

    发现问题就在这里

    ReferenceError: **margeInto is not defined**,,ReferenceError: margeInto is
    not defined at eval (eval at load
    

    实际上是的 mergeInto margeInto ,通过替换语法错误,我能够成功构建。