首页 文章

如果我没有.bundle,如何在Unity3d中调用C中的非托管函数? (苹果电脑)

提问于
浏览
3

我在Mac上 .

我有一堆c源代码(.c && .h) .

我有一个静态库(.a) .

I want to use that .a library from within Unity.

我查看了Unity的插件文档(http://unity3d.com/support/documentation/Manual/Plugins.html),该文件说PC和Mac独立,.bunlde文件似乎是唯一的解决方案 . Unity提供的所有示例插件项目都有.bundle插件 .

但我在Unity中使用.a库看过prime31插件!

任何人都知道他们是怎么做到的?

以下是我从分析prime31插件时可以看到的一切:

(1)他们将.a库放在Unity的Editor文件夹中

(2)他们有一个包含大量[DllImport(“__ Internal”)]的C#脚本

我试着这样做:

(1)我在Xcode中编写了一个简单的hello_world.c并构建了一个.a库 . 我把libhelloworld.a放在Asset / Editor中

(2)然后我写了一个C#脚本,如下所示:

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class testlib : MonoBehaviour {
    [DllImport ("libhelloworld")]
    static public extern System.String helloworld();
}

(3)然后我写了一个测试脚本:

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    // Use this for initialization
    void Start () {
        print(testlib.helloworld());
    }


}

(4)通过这样做我得到一个运行时错误:

DllNotFoundException: libhelloworld
test.Start () (at Assets/Script/test.cs:8)

非常感谢!

PS:如果有些人想知道为什么我有源代码而不是捆绑包 . 我正在尝试从那些.c和.h构建一个包但尚未成功 . 源代码是用make工具编译的,但我不知道除了Xcode之外还能构建一个bundle . 所以我想我必须使用Xcode来构建我的包 . 我的问题是当我尝试使用Xcode构建它时,我得到了数百万个错误,说我有重复的主条目 . 我检查了源代码,发现它确实有重复的main(),因为源代码有很多附带的实用程序 . 我尝试删除这些实用程序,但相同的错误不会消失...

我打算在其他地方问这个问题,因为这似乎与Unity无关 . 但如果有人在这里碰巧知道答案,请不要犹豫 - 让我知道!

2 回答

  • 3

    好的,我收到了来自prime31人的电子邮件 . It's impossible to do that.

    Unity不为OSX构建Xcode项目,因此您无法链接静态库 . Unity确实为iOS构建了一个Xcode项目,这就是prime31开发人员可以使用.a库的方式(在Xcode中,而不是在Unity中)

    总而言之,要在MacOS上使用Unity中的非托管代码,唯一正确的方法是从源代码构建一个包,然后将其导入Unity . 就像他们的文档说的那样!

    我想我会尝试从源代码构建一个包或者尝试从我现在能够构建的.a库中构建一个包,尽管Mac OS文档说它没有意义:

    注意:某些Xcode目标(例如shell工具和静态库)不会导致创建包或包 . 这是正常的,不需要专门为这些目标类型创建包 . 为这些目标生成的结果二进制文件旨在按原样使用 .

    我可以发布另一个问题,如果这个问题得到解答,我会在这里附上一个链接......

    好吧我回来编辑:

    最后,我从.a静态库构建了一个包,并且能够从Unity调用库的功能 . 我是这样做的:How to organize C source file previously compiled by GCC Make and build them into an Xcode bundle? I have a Duplicate Symbol _main Error

  • 0

    我正在使用我自己的库来进行iOS项目,它运行正常 . 我没有_2921102的从plugins文件夹复制的机制,但在XCode中完全设置它 . 在上面的HelloWorld示例中,尝试 [DllImport("__Internal")] .

    按照我之前的回答中的链接How to use an xcode game on unity3d看看我的博客帖子,它正好处理这个问题 .

相关问题