Unity Scripting armv7错误

时间:2011-11-11 11:31:30

标签: ios unity3d

我正在尝试编写我的第一个统一脚本。这是名为TestPlugin.cs的文件的代码,该文件位于Assets / Plugins:

using UnityEngine; 
using System.Runtime.InteropServices;

public class TestPlugin : MonoBehaviour 
{
    [DllImport ("__Internal")]
    private static extern int getString ();

    public static void Awake () {
      print (getString ());
    }
} 

这是我导入到生成的xCode项目的classes文件夹中的两个文件的代码:

TestPlugin.h:

#import <Foundation/Foundation.h>

@interface TestPlugin : NSObject

-(int)getString;

@end

TestPlugin.m:

#import "TestPlugin.h"

@implementation TestPlugin

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (int)getString
{
    return 7;
}

@end

最后,这是位于Asset文件夹内的javascript文件。

TestPluginTest.js:

function Update () 
{
TestPlugin.Awake ();
}

此外,请注意,我不一定期望这一切都能正常工作,只是为了编译(尽管欢迎额外的指示和提示)

尝试构建到iPhone(实际设备)时,我在xCode中遇到的错误是:

  

架构armv7的未定义符号:“_ getString”,引用   从:         RegisterMonoModules.o中的RegisterMonoModules()ld:找不到架构armv7的符号collect2:ld返回1退出状态

     

“_ getString”,引自:

     

RegisterMonoModules.o中的RegisterMonoModules()

     

ld:找不到架构armv7的符号

     

collect2:ld返回1退出状态

我很难过!提前谢谢!

1 个答案:

答案 0 :(得分:1)

我认为问题在于Obj-C接口,因为链接器不知道如何处理签名。当我连接一个自编写的库时,我设计的接口只包含纯C代码:

interface.h

#ifdef __cplusplus
    extern "C" {
#endif    
    int getString();        
#ifdef __cplusplus
    }
#endif

interface.c:

int getString() {
    // do something
}

也许有用的博客帖子:

iPhone & Unity3D: Integrating 3rd Party Static Libraries in Unity3D Generated XCode Projects

Unity Native Plugins: OS X

Clever Martian's Blog - An Experiment with iPhone Native UI and Unity 3 Pro