Tag: swig

非托pipeC#调用静态库

我正在使用swig来生成一些C#代码库的基础上使用C#的包装。 当我运行swig时,它会生成一个包装器的c文件,将所有的function公开给生成的PInvoke C#文件…例如: // This is in KodLogic_wrap.c SWIGEXPORT void SWIGSTDCALL CSharp_DMGameMode_timeLimit_set(void * jarg1, unsigned short jarg2) { … } // This is in KodLogicPInvoke.cs [global::System.Runtime.InteropServices.DllImport("KodLogic", EntryPoint="CSharp_DMGameMode_timeLimit_set")] 当我构build一个dynamic库时,这很好用。 不过,我现在需要支持iOS,所以我准备了一个静态库,并通过-dllimport '__Internal'选项来-dllimport '__Internal'工作。 不幸的是,我得到的链接错误,如: "_DMGameMode_timeLimit_set", referenced from: RegisterMonoModules() in RegisterMonoModules.o (maybe you meant: _CSharp_DMGameMode_timeLimit_set) 的确,我的意思是“CSharp_DMGameMode_timeLimit_set”,但这是“入口点”参数的一点? 所以,由于这个错误是由Unity生成的Xcode项目抛出的,我不太确定失败的根源是什么。 它是否对静态库失败? 这是一个固定的统一或边上的东西? 更新:在深入挖掘之后,我想我对这里发生的事情有一点点的了解。 主要的问题似乎来自AOT编译器,它试图将所有CS代码编译到ARM程序集。 这似乎是iOS所需要的,所以在Unity的AOT编译期间,它会生成一个文件RegisterMonoModules.cpp ,它试图为本地代码定义访问函数。 RegisterMonoModules.cpp不尊重入口点参数,导致未定义的符号错误被抛出… 仍试图find一个适当的解决方法。