Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2个月前关闭。
                                                                                            
                
        
我一直在尝试用C语言编写简单的函数,并使用IL2CPP将它们直接包含在我的插件目录中,而无需构建DLL,因为我发现它更直接,成本更低的P / Invoke方式,也可能不需要重新启动Unity时间我做出改变。

但是,当我使用独立目标为目标IL2CPP脚本后端时,我总是在播放模式下的编辑器中收到此错误:
EntryPointNotFoundException
而当我建立时,我得到/il2cpp.exe did not run properly!

我有带C ++工作负载的VS2019和Windows 10 SDK。

有谁知道如何在Unity中使用本机源文件和IL2CPP?

样例代码:

#include <math.h>
#define EXPORT __declspec(dllexport)

/* Power function*/
EXPORT int power1(int n, int p)
{
    int r = pow(n, p);
    return r;
}


C#

[DllImport("__Internal", EntryPoint ="power1")] static extern int power1(int n, int p);


编辑:
错误我得到:

Failed running C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp/build/deploy/net471/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="WindowsDesktop" --architecture="x86" --configuration="Release" --outputpath="C:\Users\HP\Documents\Unity Projects\C11\Temp/StagingArea/Data\Native\GameAssembly.dll" --cachedirectory="C:\Users\HP\Documents\Unity Projects\C11\Assets\..\Library/il2cpp_cache" --incremental-g-c-time-slice=3 --profiler-report --map-file-parser="C:/Program Files/Unity 2020.1.0a12/Editor/Data/Tools/MapFileParser/MapFileParser.exe" --directory="C:/Users/HP/Documents/Unity Projects/C11/Temp/StagingArea/Data/Managed" --generatedcppdir="C:/Users/HP/Documents/Unity Projects/C11/Temp/StagingArea/Data/il2cppOutput"

stdout:
Building GameAssembly.dll with MsvcDesktopToolChain
    Msvc Install Version: 15.0
    Msvc Install SDK Directory: C:\Program Files (x86)\Windows Kits\10
    Msvc Linker Path: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x86\link.exe
    Msvc Compiler Path: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x86\cl.exe

    Output directory: C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\Native
    Cache directory: C:\Users\HP\Documents\Unity Projects\C11\Library\il2cpp_cache
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: plug.c
C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput\plug.c(4): error C2059: syntax error: 'string'

Invocation was: Executable: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x86\cl.exe"
Arguments: "C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput\plug.c" /nologo /c /bigobj /W3 /Zi /EHs /GR- /Gy /utf-8 /wd4102 /wd4800 /wd4056 /wd4190 /wd4723 /wd4467 /wd4503 /wd4996 /wd4200 /Ox /Oi /Oy- /GS- /Gw /GF /Zo /MT /DNET_4_0 /DUNITY_AOT /DIL2CPP_MONO_DEBUGGER_DISABLED /DGC_NOT_DLL /DRUNTIME_IL2CPP /DIL2CPP_ENABLE_WRITE_BARRIERS=1 /DIL2CPP_INCREMENTAL_TIME_SLICE=3 /DBASELIB_INLINE_NAMESPACE=il2cpp_baselib /D_WIN32 /DWIN32 /DWIN32_THREADS /D_WINDOWS /DWINDOWS /D_UNICODE /DUNICODE /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS /D_WINSOCK_DEPRECATED_NO_WARNINGS /DNOMINMAX /D_NDEBUG /DNDEBUG /DWINDOWS_SDK_BUILD_VERSION=17763 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\libil2cpp" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\libil2cpp" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\bdwgc\include" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\xxHash" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\baselib\Include" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\baselib\Platforms\Windows\Include" /I"C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput" /I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt" /Fo"C:\Users\HP\Documents\Unity Projects\C11\Library\il2cpp_cache\42917C786FF6C7700329B5FBFAD9962E.obj" /Fd"C:\Users\HP\Documents\Unity Projects\C11\Library\il2cpp_cache\42917C786FF6C7700329B5FBFAD9962E.pdb"
EnvArg key: PATH value: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86;C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x64

   at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector)
   at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   at il2cpp.Program.DoRun(String[] args, List`1 foundAssemblies)
   at il2cpp.Program.Run(String[] args, Boolean setInvariantCulture)
   at il2cpp.Program.Main(String[] args)
stderr:

Unhandled Exception: Unity.IL2CPP.Building.BuilderFailedException: plug.c
C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput\plug.c(4): error C2059: syntax error: 'string'

Invocation was: Executable: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x86\cl.exe"
Arguments: "C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput\plug.c" /nologo /c /bigobj /W3 /Zi /EHs /GR- /Gy /utf-8 /wd4102 /wd4800 /wd4056 /wd4190 /wd4723 /wd4467 /wd4503 /wd4996 /wd4200 /Ox /Oi /Oy- /GS- /Gw /GF /Zo /MT /DNET_4_0 /DUNITY_AOT /DIL2CPP_MONO_DEBUGGER_DISABLED /DGC_NOT_DLL /DRUNTIME_IL2CPP /DIL2CPP_ENABLE_WRITE_BARRIERS=1 /DIL2CPP_INCREMENTAL_TIME_SLICE=3 /DBASELIB_INLINE_NAMESPACE=il2cpp_baselib /D_WIN32 /DWIN32 /DWIN32_THREADS /D_WINDOWS /DWINDOWS /D_UNICODE /DUNICODE /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS /D_WINSOCK_DEPRECATED_NO_WARNINGS /DNOMINMAX /D_NDEBUG /DNDEBUG /DWINDOWS_SDK_BUILD_VERSION=17763 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\libil2cpp" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\libil2cpp" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\bdwgc\include" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\xxHash" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\baselib\Include" /I"C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp\external\baselib\Platforms\Windows\Include" /I"C:\Users\HP\Documents\Unity Projects\C11\Temp\StagingArea\Data\il2cppOutput" /I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt" /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt" /Fo"C:\Users\HP\Documents\Unity Projects\C11\Library\il2cpp_cache\42917C786FF6C7700329B5FBFAD9962E.obj" /Fd"C:\Users\HP\Documents\Unity Projects\C11\Library\il2cpp_cache\42917C786FF6C7700329B5FBFAD9962E.pdb"
EnvArg key: PATH value: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86;C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX64\x64

   at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector)
   at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   at il2cpp.Program.DoRun(String[] args, List`1 foundAssemblies)
   at il2cpp.Program.Run(String[] args, Boolean setInvariantCulture)
   at il2cpp.Program.Main(String[] args)

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1)
UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List`1, Action`1, String)
UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(Il2CppBuildPipelineData, String, String, Boolean)
UnityEditorInternal.IL2CPPBuilder:Run()
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry)
DesktopStandalonePostProcessor:SetupStagingArea(BuildPostProcessArgs, HashSet`1)
DesktopStandalonePostProcessor:PostProcess(BuildPostProcessArgs)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)


错误2

Exception: C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp/build/deploy/net471/il2cpp.exe did not run properly!
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action`1[T] setupStartInfo) (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditorInternal.IL2CPPBuilder.RunIl2CppWithArguments (System.Collections.Generic.List`1[T] arguments, System.Action`1[T] setupStartInfo, System.String workingDirectory) (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditorInternal.IL2CPPBuilder.ConvertPlayerDlltoCpp (UnityEditor.Il2Cpp.Il2CppBuildPipelineData data, System.String outputDirectory, System.String workingDirectory, System.Boolean platformSupportsManagedDebugging) (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditorInternal.IL2CPPBuilder.Run () (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String stagingAreaData, UnityEditorInternal.IIl2CppPlatformProvider platformProvider, System.Action`1[T] modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at <71e256980c424823a60822d6a2aa03cd>:0)
DesktopStandalonePostProcessor.SetupStagingArea (UnityEditor.Modules.BuildPostProcessArgs args, System.Collections.Generic.HashSet`1[T] filesToNotOverwrite) (at <71e256980c424823a60822d6a2aa03cd>:0)
DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at <71e256980c424823a60822d6a2aa03cd>:0)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at <71e256980c424823a60822d6a2aa03cd>:0)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <71e256980c424823a60822d6a2aa03cd>: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 <71e256980c424823a60822d6a2aa03cd>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

最佳答案

您没有发布Unity会给您的完整错误,所以我猜您会遇到什么错误...在这两种情况下,这都不起作用,因为:


默认情况下,C#使用__stdcall调用约定,而C / C ++使用__cdecl。因此,链接器将无法在链接时找到您的功能,并且会出错。您需要在P / Invoke声明或本机定义上对其进行修复。
如果源文件是.cpp文件,则需要将函数标记为extern "C",以使编译器不会破坏其名称,因此可以P /调用它。


至于编辑器中的EntryPointNotFoundException:Unity编辑器不支持此功能。它仅适用于使用IL2CPP脚本编写后端进行的构建。

关于c++ - 在IL2CPP中将C/C++源文件包含为插件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59121758/

10-11 23:03
查看更多