设为首页 收藏本站
查看: 965|回复: 0

[经验分享] Ubuntu 14.04 Server 上安装git源 mono 3.6.1 错误记录及成功步骤

[复制链接]

尚未签到

发表于 2015-4-1 08:22:31 | 显示全部楼层 |阅读模式
      看到ASP.NET vNext要支持Linux后,终于按捺不住折腾的心,决定先架个环境出来,只是实在没想到,因为相对熟悉点才选择的Ubuntu 14.04,会让过程会如此坎坷,有时呆看着屏幕上提示的种种error,真有点别人碰到的错都被我碰到了的荣幸,所以目标达成后,回头将这些错误回顾一遍,记录下来,以为将来鉴。
      安装时主要参照的教程,是宇内流云写的《在Ubuntu操作系统上安装mono的具体方法》,简称文1;在排错过程中,还有参考园子里 逆水寒龙 的《Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录》,简称文2.

      首先是参照文1的一、二、三步来,因为Ubuntu版本的差异,其中有些包小数字上不同,然后就是安装libgdiplus,我当时选择的是更新一点的libgdiplus-2.10.9.tar.bz2:



wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2
tar jvxf libgdiplus-2.10.9.tar.bz2

cd libgdiplus-2.10.9

./configure --prefix=/usr

make
      首先会很快得到一个错误,基本就是:



../libtool: line xxxx: X-xxx command not found
      这个可以先执行  export echo=echo 再 make来解决;另外,还在某E文中找到个办法,用 libgdiplus目录下的libtool 替换掉 其下 pixman/libtool,试了下貌似也能解决问题。
      继续 make,报错,如同文2中的一样,主要就是:



gdiplus-private.h:33:31: fatal error: freetype/tttables.h: No such file or directory
#include
^
      按文2中的办法即:



ln -s /usr/include/freetype2 /usr/include/freetype
      依旧error,第二个要改动的地方也照抄,结果再报错就是 *** DSO missing from command line。
      然后不知怎么想的,下了个版本老一点的 libgdiplus-2.10.tar.bz2 ,一试竟然编译成功了!
      在安装mono时,问题又来了,编译3.X以后版本的mono需要一个至少先有一个2.10版的mono,但记得园子里的张善友在博文里说过,从哪个版本开始好像也可以不要,因为是3个月前看过的,记不大清,于是直接行动,结果当然是缺少一个 mcs。
      之后尝试好几种办法:
  1、按文1回复中,宇内提到办法,先 sudo apt-get install mono-gmcs,编译再 remove掉
  2、文2回复中,alienblog提到的用 sudo apt-get build-dep mono 来解决依赖问题;
  3、干脆直接先装个ubuntu自带的mono: sudo apt-get install mono-complete
      尝试的结果,都是报错称XXXX 与 GAC 中的XXX冲突云云, 我当时猜想可能因为这3种办法都会装上 mono-runtime,所以又想找找不预装mono的办法。
      经过N多折腾,最终好歹还是编译装上了git源的 mono3.6.1,以下为安装记录:


  # 系统环境:vbox中安装的Ubuntu 14.04 Server,内存分配 2G,locale直接选了en_US
  # 以下为安装成功后,重复测试通过的全部步骤
  
sudo apt-get install build-essential automake autoconf
sudo apt-get install bison gettext libtool libglib2.0-dev libfreetype6-dev libfontconfig1-dev
sudo apt-get install libgif-dev libtiff4-dev libpng12-dev libx11-dev libxft-dev libjpeg-dev
  # 照抄 http://www.rocko.me/install-mono-3-4-ubuntu/ 提到的依赖包,编译成功后
# 回头重复测试时,发现去掉libgtk-3-dev,在github源的libgdiplus运行 autogen.sh 后,
# 会提示 依赖cairo,需要 >=1.6.4,也懒得去单独解决 cairo 了,直接照搬;
# 至于 xorg-dev 没再测试,有没有用就不知道了,留着先 - -!
sudo apt-get install xorg-dev libgtk-3-dev
  sudo apt-get install git
  git clone git://github.com/mono/mono.git
cd mono
  # 为了整齐,把 libgdiplus 放在了mono目录下
git clone git://github.com/mono/libgdiplus.git
cd libgdiplus/
./autogen.sh --prefix=/usr
make
sudo make install
  # 中场休息
sudo ldconfig
  
#回到mono目录
cd ..
./autogen.sh --prefix=/usr
  # 参考 http://www.mono-project.com/Compiling_Mono_From_Git
# 这是不预装mono编译的好办法,不过文中提到,要先执行过 ./autogen.sh
make get-monolite-latest
  # 同样,make也需要额外参数
make EXTERNAL_MCS="${PWD}/mcs/class/lib/monolite/gmcs.exe"
  sudo make install
sudo ldconfig
mono -V
DSC0000.png
      最后,感谢文中提到各位作者,这些经验对我帮助良多。
  

  2014.7.22 补录:
      2014.7.15 以前git的mono源码编译安装的,在一个Asp.Net vNext工程里,可能会出现 kpm restore 失败的问题,类似这样:
  



Attempting to resolve dependency Microsoft.CSharp >=
Attempting to resolve dependency ConsoleApp >= 1.0.0
Attempting to resolve dependency System.Console >= 4.0.0.0
...
System.AggregateException:  ---> System.IO.FileFormatException: The specified archive is invalid.
at System.IO.Packaging.Package.OpenCore (System.IO.Stream stream, FileMode packageMode, FileAccess packageAccess, Boolean ownsStream) [0x00000] in :0
at System.IO.Packaging.Package.Open (System.IO.Stream stream, FileMode packageMode, FileAccess packageAccess, Boolean ownsStream) [0x00000] in :0
at System.IO.Packaging.Package.Open (System.IO.Stream stream, FileMode packageMode, FileAccess packageAccess) [0x00000] in :0
at Microsoft.Framework.PackageManager.Restore.NuGet.PackageFeed+d__1.MoveNext () [0x00000] in :0
--- End of stack trace from previous location where exception was thrown ---
  
      我在笔记本上正好是7.14号编译安装的,结果kpm restore始终无法下载依赖的库,一度以为源被XX了。
      解决办法很多,不过mono 7.15 的一个commit直接解决了这个问题,“Merge pull request #1064 from ranma42/fix-config-paths”
      将mono代码更新到这个commit之后,重新编译安装后就省心了。

  
  
  2014.7.22 补录2:
      2014.7.17 到目前无止,无法编译mono git最新源码的,是因为 kumpera 在7.17提交的几个unit-test下关于hashtable的改动,导致最终无法编译成功:
  



/usr/bin/ld: test-conc-hashtable: hidden symbol `mono_thread_get_abort_signal' isn't defined
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make[3]: *** [test-conc-hashtable] Error 1
  
      昨晚的测试依旧,试了下,退回他提交前的随便哪个commit都没问题,不过考虑到上一个问题,建议不要退太远,比如git clone了最新源码后,可以执行这个命令:



git reset --hard d959941265aa7c63dfca3608cc182cca4a29e49f
      再编译就OK了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-52636-1-1.html 上篇帖子: Ubuntu server 搭建Git server 下篇帖子: Install OpenERP(Odoo) v7 from Github | Ubuntu 14.04 LTS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表