【问题标题】:How do I build native C source code to create a library for Unity, to be used for iOs Platform?如何构建原生 C 源代码以创建 Unity 库,用于 iOs 平台?
【发布时间】:2019-09-21 05:26:08
【问题描述】:

我想从原生 C 源代码导入一个库以用于 Unity,用于 iO。我希望需要 .a 二进制文件和 .h 标头(以及任何其他文件,如果我缺少任何文件),但我找不到有关如何构建它的任何指南。

我尝试直接在 Xcode 上构建源代码,但我无法从中创建库。 XCode 只接受带有命令行项目的原生 C,而我需要一个库。

然后我尝试在 mac 终端上运行这个 CMake 命令: 制作。 -DCMAKE_SYSTEM_NAME=iOS "-DCMAKE_OSX_ARCHITECTURES=arm64;arm64e" -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 -DENET_STATIC=1 -DENET_LZ4=1 -GXcode

这会创建一个 Xcode 项目,我为通用 IOS 构建它,但是当我将它部署到设备上时,代码无法统一运行。

【问题讨论】:

    标签: ios c unity3d build


    【解决方案1】:

    Bonjour example from the Unity Manual 是一个很好的起点。这至少为您提供了一个有效的 iOS 插件作为起点。

    您将文件包含在您的 Unity 项目中,并为 iOS 构建。您会注意到 Plugins/iOS 下的文件会自动包含在生成的 Xcode 项目中。它们只会在您构建/运行 Xcode 项目时被编译。

    注意,iOS 插件与 MacOS 插件不同。对于 MacOS 插件,您需要创建捆绑包并将其包含到您的 UnityProject 中。 DllImport 装饰器在您的 C# 代码上也会有所不同。对于 iOS,它是 "__Internal",但对于 MacOS,它是包的名称。

    如果您尝试与第三方库交互,您可能需要手动修改 Xcode 项目的库搜索路径,以便在构建和链接时正确定位您的 .a 和 .h 文件。

    附带说明,当包含第三方 .a 二进制文件时,请验证它是否符合 iOS 架构要求,否则您的应用在提交到应用商店时可能会被拒绝。

    【讨论】:

    • 感谢您的信息!装饰和插件设置应该已经到位,我只需要构建它以在设备上试用它。要链接二进制文件,我应该将它们设置在 Plugin/iOs 文件夹 source 下。但我需要二进制文件来检查它。 “验证它是否符合 iOS 架构要求” 是的,这是问题的一部分。当我构建代码以实现二进制文件时,我需要了解在何处以及如何设置架构。
    • 我不认为仅仅将二进制文件放在 Plugins/iOS 文件夹中就足以将它们链接到最终的 Xcode 构建。您很可能需要将二进制文件添加为 Xcode 中的依赖项(在 General -> Linked Frameworks and Libraries 下)。另外,您打算如何与 Unity 中的二进制文件进行通信?通常你需要有一个 extern "C"block 函数作为你的 C# 和库之间的桥梁(参见 BonjourClientImpl.mm 的例子)
    • 另外,如果你的外部库是相对独立的,并且你有源代码,你可能需要做的就是在Plugin/iOS中包含它的源文件,提供一个.mm文件extern "C" 部分,让 Xcode 为您处理构建。我过去曾通过第三方库成功地做到了这一点。优点是您不必乱用包含依赖项。
    • 我的一位同事从 CMake 构建了该项目,该项目创建了一个 XCode 项目。然后从 XCode 我构建了二进制 .a 文件。之后,我在 Plugin/iOs 下包含了 .a 文件和源 C 本机代码的 .h 标头,一切似乎都在工作。我不认为 .mm 是必需的,因为我使用的不是 Objective-C,而是原生 C 源代码。也许它可以通过直接放置 .c 代码而不是二进制文件来工作。我没有提交答案,因为我无法重现构建,我仍然不完全确定这是否完全稳定。
    • 我不确定我是否理解。当您说一切正常时,您的意思是当您部署在 iOS 设备上时,您可以调用库中的函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2010-10-11
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多