共计 9683 个字符,预计需要花费 25 分钟才能阅读完成。
今天丸趣 TV 小编给大家分享一下 ubuntu 如何编译安装 mono 环境的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
准备工作
先在 vs2012 上编译一个 winform,代码如下:
using system;
using system.windows.forms;
namespace formstest
static class program
/// summary
/// 应用程序的主入口点。/// /summary
[stathread]
static void main()
application.enablevisualstyles();
application.setcompatibletextrenderingdefault(false);
application.run(new form());
}
尝试在 ubuntu 上用 mono 运行:
nike@nike-pc:~$ cd desktop/
nike@nike-pc:~/desktop$ ls
formstest.exe
nike@nike-pc:~/desktop$ mono formstest.exe
unhandled exception:
system.typeinitializationexception: an exception was thrown by the type initializer for system.windows.forms.xplatui --- system.typeinitializationexception: an exception was thrown by the type initializer for system.drawing.gdiplus --- system.dllnotfoundexception: /opt/mono-3.2.8/lib/libgdiplus.so
at (wrapper managed-to-native) system.drawing.gdiplus:gdiplusstartup (ulong ,system.drawing.gdiplusstartupinput ,system.drawing.gdiplusstartupoutput)
at system.drawing.gdiplus..cctor () [0x00000] in filename unknown :0
--- end of inner exception stack trace ---
at system.drawing.graphics.fromhdcinternal (intptr hdc) [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11.setdisplay (intptr display_handle) [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11..ctor () [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11.getinstance () [0x00000] in filename unknown :0
at system.windows.forms.xplatui..cctor () [0x00000] in filename unknown :0
--- end of inner exception stack trace ---
at system.windows.forms.application.enablevisualstyles () [0x00000] in filename unknown :0
at formstest.program.main () [0x00000] in filename unknown :0
[error] fatal unhandled exception: system.typeinitializationexception: an exception was thrown by the type initializer for system.windows.forms.xplatui --- system.typeinitializationexception: an exception was thrown by the type initializer for system.drawing.gdiplus --- system.dllnotfoundexception: /opt/mono-3.2.8/lib/libgdiplus.so
at (wrapper managed-to-native) system.drawing.gdiplus:gdiplusstartup (ulong ,system.drawing.gdiplusstartupinput ,system.drawing.gdiplusstartupoutput)
at system.drawing.gdiplus..cctor () [0x00000] in filename unknown :0
--- end of inner exception stack trace ---
at system.drawing.graphics.fromhdcinternal (intptr hdc) [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11.setdisplay (intptr display_handle) [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11..ctor () [0x00000] in filename unknown :0
at system.windows.forms.xplatuix11.getinstance () [0x00000] in filename unknown :0
at system.windows.forms.xplatui..cctor () [0x00000] in filename unknown :0
--- end of inner exception stack trace ---
at system.windows.forms.application.enablevisualstyles () [0x00000] in filename unknown :0
at formstest.program.main () [0x00000] in filename unknown :0
遇到错误了 system.dllnotfoundexception: /opt/mono-3.2.8/lib/libgdiplus.so,原因是如果要在 ubuntu 运行 winform,那么必须要安装 libgdiplus。
下载 libgdiplus 并编译
nike@nike-pc:~$ cd src
nike@nike-pc:~/src$ wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2
--2014-03-27 22:46:40-- http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2
resolving download.mono-project.com (download.mono-project.com)... 54.230.157.116, 54.230.157.204, 54.230.158.216, ...
connecting to download.mono-project.com (download.mono-project.com)|54.230.157.116|:80... connected.
http request sent, awaiting response... 200 ok
length: 2074317 (2.0m) [application/x-bzip2]
saving to: ‘libgdiplus-2.10.9.tar.bz2
100%[======================================] 2,074,317 224kb/s in 9.5s
2014-03-27 22:46:54 (213 kb/s) - ‘libgdiplus-2.10.9.tar.bz2 saved [2074317/2074317]
nike@nike-pc:~/src$ ls
libgdiplus-2.10.9.tar.bz2 mono-3.2.8 mono-3.2.8.tar.bz2
nike@nike-pc:~/src$ tar -xvjf libgdiplus-2.10.9.tar.bz2
nike@nike-pc:~/src$ cd libgdiplus-2.10.9/
nike@nike-pc:~/src/libgdiplus-2.10.9$ ./configure --prefix=/opt/mono-3.2.8
============== 省略了很多 ==============
checking pkg-config is at least version 0.9.0... yes
checking for base_dependencies... no
configure: error: package requirements (glib-2.0 = 2.2.3) were not met:
no package glib-2.0 found
consider adjusting the pkg_config_path environment variable if you
installed software in a non-standard prefix.
alternatively, you may set the environment variables base_dependencies_cflags
and base_dependencies_libs to avoid the need to call pkg-config.
see the pkg-config man page for more details.
遇到错误了,需要安装 libglib2.0-dev:
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install libglib2.0-dev
reading package lists... done
building dependency tree
reading state information... done
the following extra packages will be installed:
libglib2.0-0 libglib2.0-bin libpcre3-dev libpcrecpp0 zlib1g-dev
suggested packages:
libglib2.0-doc
the following new packages will be installed:
libglib2.0-dev libpcre3-dev libpcrecpp0 zlib1g-dev
the following packages will be upgraded:
libglib2.0-0 libglib2.0-bin
2 upgraded, 4 newly installed, 0 to remove and 273 not upgraded.
need to get 2,728 kb of archives.
after this operation, 9,208 kb of additional disk space will be used.
do you want to continue [y/n]?
============== 省略了很多 ==============
重新初始化 libgdiplus 安装配置文件:
nike@nike-pc:~/src/libgdiplus-2.10.9$ ./configure --prefix=/opt/mono-3.2.8
============== 省略了很多 ==============
checking for libpng14... checking for libpng12... no
checking for png_read_info in -lpng... no
configure: error: *** libpng12 not found. see http://www.libpng.org/pub/png/libpng.html.
又遇到错误了,需要安装 libpng-dev:
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install libpng-dev
重新初始化 libgdiplus 安装配置文件:
nike@nike-pc:~/src/libgdiplus-2.10.9$ ./configure --prefix=/opt/mono-3.2.8
============== 省略了很多 ==============
./configure: line 13371: test: too many arguments
configure: error: failed to compile with x11/xlib.h include. you must fix your compiler paths
提示错误,需要安装 libx11-dev:
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install libx11-dev
重新初始化 libgdiplus 安装配置文件:
nike@nike-pc:~/src/libgdiplus-2.10.9$ ./configure --prefix=/opt/mono-3.2.8
============== 省略了很多 ==============
configure: error: cairo requires at least one font backend.
please install freetype and fontconfig, then try again:
http://freetype.org/ http://fontconfig.org/
configure: error: ./configure failed for cairo
需要安装 freetype 和 fontconfig:
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install libfreetype6-dev
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install fontconfig
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo apt-get install libfontconfig1-dev
重新初始化 libgdiplus 安装配置文件:
nike@nike-pc:~/src/libgdiplus-2.10.9$ ./configure --prefix=/opt/mono-3.2.8
============== 省略了很多 ==============
configuration summary
* installation prefix = /opt/mono-3.2.8
* cairo = 1.6.4 (internal)
* text = cairo
* exif tags = no. get it from http://libexif.sourceforge.net/
* codecs supported:
- tiff: no (get it from http://www.libtiff.org/)
- jpeg: no (get it from http://freshmeat.net/projects/libjpeg)
- gif: no (see http://sourceforge.net/projects/libgif)
- png: yes
note: if any of the above say no you may install the
corresponding development packages for them, rerun
autogen.sh to include them in the build.
nike@nike-pc:
./configure 通过。
编译安装源代码
nike@nike-pc:~/src/libgdiplus-2.10.9$ make
make all-recursive
make[1]: entering directory `/home/nike/src/libgdiplus-2.10.9
making all in pixman
make[2]: entering directory `/home/nike/src/libgdiplus-2.10.9/pixman
make all-recursive
make[3]: entering directory `/home/nike/src/libgdiplus-2.10.9/pixman
making all in pixman
make[4]: entering directory `/home/nike/src/libgdiplus-2.10.9/pixman/pixman
/bin/bash ../libtool --tag=cc --mode=compile gcc -dhave_config_h -i. -i.. -g -o2 -wall -fvisibility=hidden -mt pixman-access.lo -md -mp -mf .deps/pixman-access.tpo -c -o pixman-access.lo pixman-access.c
../libtool: line 852: x--tag=cc: command not found
遇到错误了,通过 google 搜索,可能是因为在项目目录下生成的 libtool 脚本中定义了 $echo 变量,但是在脚本文件 ltmain.sh 中,使用的却是 $echo(生成的 libtool 版本太旧)解决方法很简单 export echo=echo 即可:
nike@nike-pc:~/src/libgdiplus-2.10.9$ export echo=echo
nike@nike-pc:~/src/libgdiplus-2.10.9$ make
============== 省略了很多 ==============
make[2]: entering directory `/home/nike/src/libgdiplus-2.10.9/tests
/bin/bash ../libtool --tag=cc --mode=link gcc -g -o2 -pthread -o testgdi testgdi.o ../src/libgdiplus.la -lpthread -lfontconfig
libtool: link: gcc -g -o2 -pthread -o .libs/testgdi testgdi.o ../src/.libs/libgdiplus.so -lpthread -lfontconfig -pthread -wl,-rpath -wl,/opt/mono-3.2.8/lib
/usr/bin/ld: testgdi.o: undefined reference to symbol g_print
/lib/i386-linux-gnu/libglib-2.0.so.0: error adding symbols: dso missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [testgdi] error 1
make[2]: leaving directory `/home/nike/src/libgdiplus-2.10.9/tests
make[1]: *** [all-recursive] error 1
make[1]: leaving directory `/home/nike/src/libgdiplus-2.10.9
make: *** [all] error 2
编译时又出错了,解决办法为:1. 运行./configure 后,编辑 tests/makefile 文件 2. 在 makefile 文件 130 行位置,将 libs = -lpthread -lfontconfig 改为 libs = -lpthread -lfontconfig -lglib-2.0 -lx11 3. 再次运行 make 即可
nike@nike-pc:~/src/libgdiplus-2.10.9$ vim tests/makefile
nike@nike-pc:~/src/libgdiplus-2.10.9$ make
============== 编译很快 ==============
nike@nike-pc:~/src/libgdiplus-2.10.9$ sudo make install
============== 省略了很多 ==============
安装完成。
设置 path 环境变量
nike@nike-pc:~/src/mono-3.2.8$ cd ~
nike@nike-pc:~$ vim .bashrc
在该文件末尾追加以下语句:export ld_library_path=/opt/mono-3.2.8/lib 然后:
nike@nike-pc:~$ . .bashrc
nike@nike-pc:~$ echo $ld_library_path
/opt/mono-3.2.8/lib
nike@nike-pc:~$
验证 libgdiplus 是否安装成功
nike@nike-pc:~$ cd desktop/
nike@nike-pc:~/desktop$ mono formstest.exe
运行成功。
以上就是“ubuntu 如何编译安装 mono 环境”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。