ubuntu 13.10编译安装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 13.10编译安装mono环境(二)
-
Ubuntu1604生产环境下编译安装mariadb10.2.26
-
ubuntu 13.10编译安装mono环境(二)
-
Ubuntu1604生产环境下编译安装mariadb10.2.26
-
ubuntu13.10编译安装mono环境(一)
-
CentOS7环境下免编译二进制包安装MySQL5.6教程
-
[环境配置]Ubuntu 16.04 源码编译安装OpenCV-3.2.0+OpenCV_contrib-3.2.0及产生的问题
-
[环境配置]Ubuntu16.04下编译安装gcc6.3.0
-
Ubuntu环境编译安装PHP和Nginx的方法
-
Ubuntu环境源码编译安装xdebug的方法