最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

【Unity3D】unity

IT圈 admin 1浏览 0评论

【Unity3D】unity

目录

文章最终成功编译出libmono.so如下图所示,历时9天

一、下载文件配置环境 

二、下载Unity-Mono库

三、正式开始编译libmono.so

1、libmono.so编译文件基础说明

 2、修改相关文件(及其重要)

① 修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh

② 手动克隆/home/用户名/mono/android_krait_signal_handler

③ 修改build.pl

④ 修改configure文件 

3、敲打命令,开始编译!

① 配置NDK路径 (临时设置NDK路径)【PS:网上有全局设置的方法懒得搞了】

② 单独执行编译android_krait_signal_handler库(会得到builds.zips等文件)

③ 编译unity-mono库

四、途中可能发生的BUG说明以及解决思路


文章最终成功编译出libmono.so如下图所示,历时9天


 正式讲解每一个步骤以及报错解决思路,坑爹的地方特别多,特别离谱(作者故意的?)

参考文章:

  (基本参考它)
unity mono 库编译笔记_qlyy09的博客-CSDN博客
Ubuntu的环境 ndk和jdk环境配置 与 如何编译出Unity的libmono.so - Domefy - 博客园

NDK下载地址
Android NDK下载(r10~r25) 持续更新_StoneLiu999的博客-CSDN博客_android ndk下载

官网NDK下载地址(没有x86) :
不受支持的 NDK 下载  |  Android NDK  |  Android Developers

一、下载文件配置环境 

 1、下载NDK (android-ndk-r10e-linux-x86)  [必须32位]

.zip

 2、安装VMware Workstation虚拟机(版本15.5.0 build-14665864)

安装VMware 15.5.0 build-14665864_winfredzhang的博客-CSDN博客

3、下载CentOS 7 64.iso镜像文件(CentOS系统(linux))

Cent0S7系统镜像文件(百度网盘资源)_资深咸鱼~的博客-CSDN博客_centos7百度云下载

版本:CentOS-7-x86_64-Minimal-1708 

4、创建CentOS7系统虚拟机-设置基础配置


 

 

 

 

 

 

配置共享文件夹(需要安装VMTools,有坑——如果之前安装过必须重新安装)

 至此基础配置完毕,开始配置网络环境(不配置无法进行下载各种库)

5. 配置CentOS 7 64位系统网络环境【及其重要且必要】

参考文章:centOS 7无法连接网络详细解决办法_KookNut39的博客-CSDN博客_centos7网络不通

 

 子网IP(I) 内容填写:IPv4地址(192.168.1.2)前三位,第四位保持0 即(192.168.1.0)

 打开NAT设置(S)

完成所有如上操作后点击确认即可,注意必须关闭虚拟机后执行如上操作。

开启CentOS7系统虚拟机,正式开始安装CentOS7系统以及相关配置(VMTools安装、修改相关网络配置)这里不再过多阐述系统安装和VMTools安装(VMTools没安装好 共享文件无法生效)

小提醒:分配内存时不需要按照网上那么复杂地分配,直接选下面的我们是20GB,选完就Done 

 VMTools安装参考文章:CentOS7安装VMware Tools详细步骤_等待花开I的博客-CSDN博客_centos7安装vmware tools

网络配置:

打开

以管理员身份执行修改网络配置文件保存(ONBOOT=no改为yes)

su

输入密码

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

i

修改(注意:按下i后就会切换成编辑模式,删除字符要用键盘delete键)

修改完毕后,按Esc按键 + 回车,然后输入下面的三个字符(:wq)

:wq

重启服务【不重启无法生效】

service network restart

ping www.baidu.com 【能ping通说明正常完成网络配置】

二、下载Unity-Mono库

Mono版本: Unity_2017.4
源码地址: .4
源码下载地址: git clone -b unity-2017.4 .git

此处完全和参考文章相同(等跑通后可以换其他版本测试)

注意:unity-2017.4中没有external的额外子库 gitmodules,所以很轻松就完成了这一步,更高版本比如unity2019的,这些子库会很头疼。

三、正式开始编译libmono.so

1、libmono.so编译文件基础说明

将r10e-x86(ndk文件)和Unity-mono库文件以共享文件形式传给虚拟机CentOs7系统,拷贝过去后虚拟机/mnt/hgfs/共享文件夹名/下就会有这些文件,将它们cut到/home/用户名/下(Home文件夹下),因为共享文件夹不允许进行各种修改操作,所以要移出去,移到Home只是我的操作你可以移动到别的地方。

文件夹路径摆放结构如下:

/home/用户名/android-ndk-r10e
/home/用户名/mono
/home/用户名/mono/android_krait_signal_handler(这是一个git库文件中途会克隆下来)

 

 

 2、修改相关文件(及其重要)

① 修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh

 

 ② 手动克隆/home/用户名/mono/android_krait_signal_handler

 android_krait_signal_handler文件:

直接用git命令执行上面的命令或直接去这个路径下载它也可以。
github.com/Unity-Technologies/krait-signal-handler.git,分支是-master

克隆出来后要放置在/home/用户名/mono/下,文件夹命名必须改android_krait_signal_handler,文件结构如下所示,开始修改第二个文件build.pl

③ 修改build.pl

 

④ 修改configure文件 

主要是不识别-V -qversion去掉这2个,保留--version -v即可。

报错信息类似:
arm-linux-androideabi-gcc: error: unrecognized option '-V'
arm-linux-androideabi-gcc: error: unrecognized option '-qversion'修改脚本内容:
for ac_option in --version -v -V -qversion; do  //代码中会存在这种-V -qversion的全部改为下面for ac_option in --version -v; do

3、敲打命令,开始编译!

① 配置NDK路径 (临时设置NDK路径)【PS:网上有全局设置的方法懒得搞了】

ANDROID_NDK_ROOT=/home/用户名/android-ndk-r10e
export ANDROID_NDK_ROOT
echo $ANDROID_NDK_ROOT执行后会输出/home/用户名/android-ndk-r10e,代表设置成功!

提前安装已知相关的依赖包,注意:有一些依赖包是可能获取不到无法正常下载的,百度一下查找替代的依赖包去安装好。

yum install autoconf automake libtool pkg-config
yum install glib2-devel
yum install pkgconfig glib2
yum install libtool bison
yum install cmake
yum install libc6-dev
yum install ld-linux.so.2(可能ld-linux.so.2找不到就用这个:yum install glibc)
yum install zlib

② 单独执行编译android_krait_signal_handler库(会得到builds.zips等文件)

su
输入密码
cd /home/用户名/mono/android_krait_signal_handler
/home/用户名/android-ndk-r10e/ndk-build clean
/home/用户名/android-ndk-r10e/ndk-build

③ 编译unity-mono库

su
输入密码
cd /home/用户名/mono
./external/buildscripts/build_runtime_android.sh

等待2-3分钟左右出现SUCCESS!完成编译libmono.so。

四、途中可能发生的BUG说明以及解决思路

1、CentOS系统无法联网(以上有说明解决)

2、CentOS系统共享文件夹无效(以上有说明解决)

3、执行编译android_krait_signal_handler库时发生的BUG汇总
3.1 build.pl文件修改第一行为如下,(其他博主都有说明这个我的没问题 所以保持原样)

#!/usr/bin/perl -w

3.2 ndk-build clean执行后会发生报错:
参考文章名字:【排错】CentOS之——/lib/ld-linux.so.2: bad ELF interpreter解决
bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
是因为64位系统中安装了32位程序(可能指的是ndk是32位的)
解决方法:
yum install glibc.i686

3.3 ndk-build clean正常执行,之后执行ndk-build报错:(很关键的知识点)
 while loading shared libraries: libz.so.1: cannot open shared object file
之后会频繁出现 while loading shared libraries: xxx.so.xxx: cannot open shared object file
意思:没找到 xxx.so.xxx库,可使用:yum whatprovides xxx.so.xxx 来查看哪个包含这个.so库,再使用yum install -y xxx 安装即可。(yum相当于uBuntu的apt)
如上报错就是 yum whatprovides libz.so.1

4、执行./external/buildscripts/build_runtime_android.sh报错汇总:

4.1 linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lkrait-signal-handler
collect2: error: ld returned 1 exit statu

解决方法:修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh
找到-lkrait-signal-handler 前缀改为如下图所示。(上面也有这个截图的)

 这一个BUG是我最后解决的一个BUG,至此完成全部BUG解决。

其他乱七八糟的BUG基本可以百度轻松解决的,如果有问题可留言,关于Unity-Mono其他版本还未尝试,比如Unity2019甚至Unity2021版本的可能就不一样了,而网上的目前能看得到的教程只有Unity2017或2018了,很多都是Unity4.x 5.x的,关于Unity2017之后的版本,可能相差也不是很大。

【Unity3D】unity

目录

文章最终成功编译出libmono.so如下图所示,历时9天

一、下载文件配置环境 

二、下载Unity-Mono库

三、正式开始编译libmono.so

1、libmono.so编译文件基础说明

 2、修改相关文件(及其重要)

① 修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh

② 手动克隆/home/用户名/mono/android_krait_signal_handler

③ 修改build.pl

④ 修改configure文件 

3、敲打命令,开始编译!

① 配置NDK路径 (临时设置NDK路径)【PS:网上有全局设置的方法懒得搞了】

② 单独执行编译android_krait_signal_handler库(会得到builds.zips等文件)

③ 编译unity-mono库

四、途中可能发生的BUG说明以及解决思路


文章最终成功编译出libmono.so如下图所示,历时9天


 正式讲解每一个步骤以及报错解决思路,坑爹的地方特别多,特别离谱(作者故意的?)

参考文章:

  (基本参考它)
unity mono 库编译笔记_qlyy09的博客-CSDN博客
Ubuntu的环境 ndk和jdk环境配置 与 如何编译出Unity的libmono.so - Domefy - 博客园

NDK下载地址
Android NDK下载(r10~r25) 持续更新_StoneLiu999的博客-CSDN博客_android ndk下载

官网NDK下载地址(没有x86) :
不受支持的 NDK 下载  |  Android NDK  |  Android Developers

一、下载文件配置环境 

 1、下载NDK (android-ndk-r10e-linux-x86)  [必须32位]

.zip

 2、安装VMware Workstation虚拟机(版本15.5.0 build-14665864)

安装VMware 15.5.0 build-14665864_winfredzhang的博客-CSDN博客

3、下载CentOS 7 64.iso镜像文件(CentOS系统(linux))

Cent0S7系统镜像文件(百度网盘资源)_资深咸鱼~的博客-CSDN博客_centos7百度云下载

版本:CentOS-7-x86_64-Minimal-1708 

4、创建CentOS7系统虚拟机-设置基础配置


 

 

 

 

 

 

配置共享文件夹(需要安装VMTools,有坑——如果之前安装过必须重新安装)

 至此基础配置完毕,开始配置网络环境(不配置无法进行下载各种库)

5. 配置CentOS 7 64位系统网络环境【及其重要且必要】

参考文章:centOS 7无法连接网络详细解决办法_KookNut39的博客-CSDN博客_centos7网络不通

 

 子网IP(I) 内容填写:IPv4地址(192.168.1.2)前三位,第四位保持0 即(192.168.1.0)

 打开NAT设置(S)

完成所有如上操作后点击确认即可,注意必须关闭虚拟机后执行如上操作。

开启CentOS7系统虚拟机,正式开始安装CentOS7系统以及相关配置(VMTools安装、修改相关网络配置)这里不再过多阐述系统安装和VMTools安装(VMTools没安装好 共享文件无法生效)

小提醒:分配内存时不需要按照网上那么复杂地分配,直接选下面的我们是20GB,选完就Done 

 VMTools安装参考文章:CentOS7安装VMware Tools详细步骤_等待花开I的博客-CSDN博客_centos7安装vmware tools

网络配置:

打开

以管理员身份执行修改网络配置文件保存(ONBOOT=no改为yes)

su

输入密码

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

i

修改(注意:按下i后就会切换成编辑模式,删除字符要用键盘delete键)

修改完毕后,按Esc按键 + 回车,然后输入下面的三个字符(:wq)

:wq

重启服务【不重启无法生效】

service network restart

ping www.baidu.com 【能ping通说明正常完成网络配置】

二、下载Unity-Mono库

Mono版本: Unity_2017.4
源码地址: .4
源码下载地址: git clone -b unity-2017.4 .git

此处完全和参考文章相同(等跑通后可以换其他版本测试)

注意:unity-2017.4中没有external的额外子库 gitmodules,所以很轻松就完成了这一步,更高版本比如unity2019的,这些子库会很头疼。

三、正式开始编译libmono.so

1、libmono.so编译文件基础说明

将r10e-x86(ndk文件)和Unity-mono库文件以共享文件形式传给虚拟机CentOs7系统,拷贝过去后虚拟机/mnt/hgfs/共享文件夹名/下就会有这些文件,将它们cut到/home/用户名/下(Home文件夹下),因为共享文件夹不允许进行各种修改操作,所以要移出去,移到Home只是我的操作你可以移动到别的地方。

文件夹路径摆放结构如下:

/home/用户名/android-ndk-r10e
/home/用户名/mono
/home/用户名/mono/android_krait_signal_handler(这是一个git库文件中途会克隆下来)

 

 

 2、修改相关文件(及其重要)

① 修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh

 

 ② 手动克隆/home/用户名/mono/android_krait_signal_handler

 android_krait_signal_handler文件:

直接用git命令执行上面的命令或直接去这个路径下载它也可以。
github.com/Unity-Technologies/krait-signal-handler.git,分支是-master

克隆出来后要放置在/home/用户名/mono/下,文件夹命名必须改android_krait_signal_handler,文件结构如下所示,开始修改第二个文件build.pl

③ 修改build.pl

 

④ 修改configure文件 

主要是不识别-V -qversion去掉这2个,保留--version -v即可。

报错信息类似:
arm-linux-androideabi-gcc: error: unrecognized option '-V'
arm-linux-androideabi-gcc: error: unrecognized option '-qversion'修改脚本内容:
for ac_option in --version -v -V -qversion; do  //代码中会存在这种-V -qversion的全部改为下面for ac_option in --version -v; do

3、敲打命令,开始编译!

① 配置NDK路径 (临时设置NDK路径)【PS:网上有全局设置的方法懒得搞了】

ANDROID_NDK_ROOT=/home/用户名/android-ndk-r10e
export ANDROID_NDK_ROOT
echo $ANDROID_NDK_ROOT执行后会输出/home/用户名/android-ndk-r10e,代表设置成功!

提前安装已知相关的依赖包,注意:有一些依赖包是可能获取不到无法正常下载的,百度一下查找替代的依赖包去安装好。

yum install autoconf automake libtool pkg-config
yum install glib2-devel
yum install pkgconfig glib2
yum install libtool bison
yum install cmake
yum install libc6-dev
yum install ld-linux.so.2(可能ld-linux.so.2找不到就用这个:yum install glibc)
yum install zlib

② 单独执行编译android_krait_signal_handler库(会得到builds.zips等文件)

su
输入密码
cd /home/用户名/mono/android_krait_signal_handler
/home/用户名/android-ndk-r10e/ndk-build clean
/home/用户名/android-ndk-r10e/ndk-build

③ 编译unity-mono库

su
输入密码
cd /home/用户名/mono
./external/buildscripts/build_runtime_android.sh

等待2-3分钟左右出现SUCCESS!完成编译libmono.so。

四、途中可能发生的BUG说明以及解决思路

1、CentOS系统无法联网(以上有说明解决)

2、CentOS系统共享文件夹无效(以上有说明解决)

3、执行编译android_krait_signal_handler库时发生的BUG汇总
3.1 build.pl文件修改第一行为如下,(其他博主都有说明这个我的没问题 所以保持原样)

#!/usr/bin/perl -w

3.2 ndk-build clean执行后会发生报错:
参考文章名字:【排错】CentOS之——/lib/ld-linux.so.2: bad ELF interpreter解决
bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
是因为64位系统中安装了32位程序(可能指的是ndk是32位的)
解决方法:
yum install glibc.i686

3.3 ndk-build clean正常执行,之后执行ndk-build报错:(很关键的知识点)
 while loading shared libraries: libz.so.1: cannot open shared object file
之后会频繁出现 while loading shared libraries: xxx.so.xxx: cannot open shared object file
意思:没找到 xxx.so.xxx库,可使用:yum whatprovides xxx.so.xxx 来查看哪个包含这个.so库,再使用yum install -y xxx 安装即可。(yum相当于uBuntu的apt)
如上报错就是 yum whatprovides libz.so.1

4、执行./external/buildscripts/build_runtime_android.sh报错汇总:

4.1 linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lkrait-signal-handler
collect2: error: ld returned 1 exit statu

解决方法:修改/home/用户名/mono/external/buildscripts/build_runtime_android.sh
找到-lkrait-signal-handler 前缀改为如下图所示。(上面也有这个截图的)

 这一个BUG是我最后解决的一个BUG,至此完成全部BUG解决。

其他乱七八糟的BUG基本可以百度轻松解决的,如果有问题可留言,关于Unity-Mono其他版本还未尝试,比如Unity2019甚至Unity2021版本的可能就不一样了,而网上的目前能看得到的教程只有Unity2017或2018了,很多都是Unity4.x 5.x的,关于Unity2017之后的版本,可能相差也不是很大。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论