C++ 包括C/C++;源文件作为IL2CPP中的插件

C++ 包括C/C++;源文件作为IL2CPP中的插件,c++,c,unity3d,il2cpp,C++,C,Unity3d,Il2cpp,我一直在尝试用C编写简单的函数,并使用IL2CPP直接将它们包含在我的插件目录中,而无需构建DLL,因为我发现这样做更简单,成本更低,在p/Invoke方面,并且可能不需要在每次进行更改时重新启动Unity 但是,当我将IL2CPP脚本后端与独立目标作为目标时,在播放模式下的编辑器中总是会出现以下错误: EntryPointNotFoundException 当我构建时,我得到的/il2cpp.exe没有正常运行 我有VS2019 W/C++工作负荷和Windows 10 SDK。 有人知道如何

我一直在尝试用C编写简单的函数,并使用IL2CPP直接将它们包含在我的插件目录中,而无需构建DLL,因为我发现这样做更简单,成本更低,在p/Invoke方面,并且可能不需要在每次进行更改时重新启动Unity

但是,当我将IL2CPP脚本后端与独立目标作为目标时,在播放模式下的编辑器中总是会出现以下错误:
EntryPointNotFoundException
当我构建时,我得到的
/il2cpp.exe没有正常运行

我有VS2019 W/C++工作负荷和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;
}
编辑: 我得到的错误是:

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)
异常:C:\Program Files\Unity 2020.1.0a12\Editor\Data\il2cpp/build/deploy/net471/il2cpp.exe未正常运行!
UnityEditorInternal.Runner.RunProgram(UnityEditor.Utils.Program p,System.String exe,System.String args,System.String workingDirectory,UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser)(位于:0)
UnityEditorInternal.Runner.RunManagedProgram(System.String exe、System.String参数、System.String工作目录、UnityEditor.Scripting.Compilers.CompilerOutputParserBase解析器、System.Action`1[T]setupStartInfo)(位于:0)
UnityEditorInternal.IL2CPPBuilder.RunIl2CppWithArguments(System.Collections.Generic.List`1[T]参数,System.Action`1[T]setupStartInfo,System.String工作目录)(位于:0)
UnityEditorInternal.IL2CPPBuilder.ConvertPlayerDlltoCpp(UnityEditor.Il2Cpp.Il2CppBuildPipelineData数据,System.String输出目录,System.String工作目录,System.Boolean平台支持托管调试)(位于:0)
UnityEditorInternal.IL2CPPBuilder.Run()(位于:0)
UnityEditorInternal.IL2CPPUtils.RunIl2Cpp(System.String StagingReadata,UnityEditorInternal.IIL2cpplatformProvider platformProvider,System.Action`1[T]ModifyOutputBeforeComile,UnityEditor.RuntimeClassRegistry RuntimeClassRegistry)(位于:0)
DesktopStandalonePostProcessor.SetupStaginArea(UnityEdit.Modules.BuildPostProcessArgs参数,System.Collections.Generic.HashSet`1[T]filesToNotOverwrite)(位于:0)
DesktopStandalonePostProcessor.PostProcessor(UnityEdit.Modules.BuildPostProcessArgs args args)(位于:0)
以BuildFailedException的形式重试:引发了类型为“UnityEdit.Build.BuildFailedException”的异常。
DesktopStandalonePostProcessor.PostProcessor(UnityEdit.Modules.BuildPostProcessArgs args args)(位于:0)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcessor(UnityEditor.Modules.BuildPostProcessArgs args,UnityEditor.BuildProperties&outProperties)(位于:0)
UnityEdit.PostprocessBuildPlayer.Postprocess(UnityEditor.BuildTargetGroup targetGroup,UnityEditor.BuildTarget目标,System.String安装路径,System.String公司名称,System.String产品名称,System.Int32宽度,System.Int32高度,UnityEditor.BuildOptions选项,UnityEditor.RuntimeClassRegistry usedClassRegistry,UnityEditor.Build.Reporting.BuildReport报告)(位于:0)
gui实用程序:ProcessEvent(Int32,IntPtr)

您没有发布Unity给您的完整错误,因此我猜您会遇到什么错误……无论哪种情况,这都不起作用,因为:

  • 默认情况下,C#使用
    \uu stdcall
    调用约定,而C/C++使用
    \uu cdecl
    。因此链接器在链接时无法找到您的函数,并将出错。您需要在p/Invoke声明或本机定义中修复它

  • 如果源文件是.cpp文件,则需要将函数标记为
    extern“C”
    ,这样编译器就不会损坏其名称,从而可以将其p/调用到


  • 至于编辑器中的EntryPointNotFoundException:Unity编辑器不支持此功能。它仅适用于使用IL2CPP脚本后端生成的版本。

    您不能仅“包括”一个源文件;需要先编译。@JL2210我没有否决。它在添加之前仍然被编译。@JL2210 Unity将它与IL代码一起编译为CPP二进制文件,请阅读文档。很抱歉,我编辑了问题以添加错误。感谢您的回复,是的,我发现编辑器中没有该功能,至于“extern”我只使用C,但在C++中也使用了“Extn”,我还尝试添加<代码>·ysSTDLADE/COD>。但也没用。在.c文件中有一个编译错误:PULT.C(4):错误C2059:语法错误:“Struts”,我通过建立一个干净的文件夹解决了这个问题,可能是错误的东西损坏了文件夹。
    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)