我正在尝试在Unity中使用iOS本机框架,但我不知道如何 .
在我的C#脚本中,我调用这样的本机函数:
[DllImport ("__Internal")]
private static extern void writeHello();
void Start () {
writeHello();
}
我已经在我的项目中拖动iOS框架,如下所示:
但是当我在iPad上部署我的应用程序时,xCode显示此错误:
架构armv7的未定义符号:“_ writeHello”,引用自:RegisterMonoModules中的RegisterMonoModules()ld:未找到架构armv7 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我不明白为什么,我不知道我想做什么是可能的 . 救命! :)
谢谢,Sennin
4 回答
iOS框架必须放在xCode生成的项目中,而不是统一 .
并且框架的函数必须包含在
extern "C"
块中(如图所示here) .然后你就可以在C#中使用
dllimport
.该文档说,位于Assets / Plugins / iOS文件夹中的扩展名为.a,.m, . mm,.c,.cpp的所有文件将自动合并到生成的Xcode项目中 . 文档还说目前不支持子文件夹,因此,在您的示例中,将忽略“framework-helloUnity.framework”文件夹 .
重要的是要注意.m文件默认为C风格绑定,而.mm文件默认为C风格绑定 . 换句话说,除非您使用
extern "C"
关键字,正如Heilo建议的那样,如果将它们放在.mm或.cpp文件中,则无法找到您的函数 .换句话说,如果你把以下内容:
在名为
Assets/Plugins/iOS/myTestFile.m
的文件中,您的代码应该编译 .通过这篇文章找到了解决方案:Calling Objective-C method from C++ method?
通过这样做:
并从Unity调用我的C函数
您已在Xcode项目中编写以下函数,任何类extern“C”{ - (void)writeHello {
}}