Unity 编译 mono 库

本贴最后更新于 2276 天前,其中的信息可能已经时过境迁

环境说明

  • mac osx 10.12.6

  • unity 2017.4.6f1

步骤

  • 安装相关的工具
brew install autoconf automake libtool pkg-config
  • 克隆目录并跳转到目录下切换 unity 版本分支
git clone https://github.com/Unity-Technologies/mono.git cd mono git checkout unity-2017.4
  • 初始化子模块

  • 赋权并执行编译

./external/buildscripts/build_runtime_android.sh

imagepng

  • 遇到错误,赋权并运行 autogen.sh
./autogen.sh

imagepng

  • 遇到错误,安装 cmake
brew install cmake
  • 再次运行 autogen.sh,经过漫长的刷屏编译

imagepng

  • 输入 make 进行编译
make

imagepng

  • 再次执行 build_runtime_android.sh 编译报错

imagepng

  • 查看日志

imagepng

  • 怀疑是 ndk 版本问题导致开始分析代码

imagepng

定位到实际上是 build.pl 在搞鬼,mono 这里编译需要的 ndk 版本是 10e,但是 krait-signal-handler 要求的 ndk 版本是 13b,注释掉 krait-signal-handler 工程中的 PrepareAndroidSDK.pm 中 PrepareNDK 代码

imagepng

  • 再次执行 build_runtime_android.sh 编译成功

  • 解决编译的 so 包大小问题
    经过对比发现,编译出来的 so 很大,查了资料发现是 debug 版本,需要修改两个编译的 sh
    build_runtime_android.sh
    修改

CFLAGS="\ -DANDROID -DPLATFORM_ANDROID -DLINUX -D__linux__ \ -DHAVE_USR_INCLUDE_MALLOC_H -DPAGE_SIZE=0x1000 \ -D_POSIX_PATH_MAX=256 -DS_IWRITE=S_IWUSR \ -DHAVE_PTHREAD_MUTEX_TIMEDLOCK \ -fpic -O2 -funwind-tables \ -ffunction-sections -fdata-sections"

为了加快打包速度,注释掉

# clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5" # clean_build "$CCFLAGS_ARMv6_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv6_vfp"

build_runtime_android_x86.sh
修改

CFLAGS="\ -DANDROID -DPLATFORM_ANDROID -DLINUX -D__linux__ \ -DHAVE_USR_INCLUDE_MALLOC_H -DPAGE_SIZE=0x1000 \ -D_POSIX_PATH_MAX=256 -DS_IWRITE=S_IWUSR \ -DHAVE_PTHREAD_MUTEX_TIMEDLOCK \ -fpic -O2 \ -ffunction-sections -fdata-sections"
  • 重新编译即可,编译生成库文件在 builds/embedruntimes/android 目录下

imagepng

  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 134 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • sts
    2 引用 • 2 回帖 • 224 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 382 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 819 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 297 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 396 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 32 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 4 关注
  • OpenCV
    15 引用 • 36 回帖
  • gRpc
    11 引用 • 9 回帖 • 88 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖 • 2 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 631 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 515 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 3 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 394 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    180 引用 • 821 回帖