我正在尝试使用mono实现C应用程序中的一些脚本(参见本页http://www.mono-project.com/Embedding_Mono)。但是我需要mono-2.0.dll来实现这一点。 首先我认为它包含在单声道的二进制分配中。但我在单声道安装文件夹中找不到它。
我也尝试自己构建单声道,但构建总是以错误结束(未解析的符号,读写保护的文件,以及许多其他)。我尝试了cygwin和VS版本。
快速搜索后,我发现了其他有类似问题的人。但不幸的是,没有任何解决方案对我有用。
是否有解决方案可以轻松编译mono-2.0.dll或获取二进制文件?
由于
答案 0 :(得分:3)
修改强>
恕我直言,您正在寻找的库可以在单声道安装文件夹的bin目录中找到。实际上,安装mono 3.2.3后,MONO_INSTALLATION_PATH\bin\
目录中有两个库:libmonoboehm-2.0.dll
和libmonosgen-2.0.dll
(您必须选择Boehm或SGen GC实现)
如果你想使用Boehm实现,你可以创建一个像libmono-2.0.dll -> /opt/mymono/bin/libmonoboehm-2.0.dll
这样的符号链接。这就是全部(我认为)
但即使没有创建任何符号链接你也可以工作,你可以引用库monoboehm-2.0.dll或monosgen-2.0.dll而不是mono-2.0.dll。问题是(我认为)你正在寻找错误的图书馆名称。
无论如何,接下来是为了从cygwin编译单声道必须遵循的步骤。
结束编辑
我设法使用cygwin从Windows 8编译Mono(我想,它也适用于Windows 7)
这些是我必须遵循的步骤才能完成单声道虚拟机和您请求的库:
下载并安装32位的全新cygwin安装(即使您使用的是Windows 64位,也不要使用cygwin的64位版本)在我的情况下,cygwin版本为{{ 1}}和我的操作系统是Windows 8 64位。即使你已经有了一个cygwin环境,也应该更好(恕我直言)删除它并安装新的cygwin环境。
cygwin的安装路径应该是(至少在我的情况下):C:\ cygwin
使用cygwin,您必须安装一些运行setup-86.exe的必需依赖项。没有它们,你将无法从cygwin编译单声道:
autoconf,automake,bison,gcc-core,gcc-g ++,mingw-gcc,libtool,make,python,automake,bison,gcc,gdb,gettext,intltool,libiconv,libtool,pkg-config,vim
打开cygwin控制台并运行以下命令:
2.844 (32 bit)
Me@mewin8 ~
$ mkdir -p /opt/mono323
Me@mewin8 ~
$ mkdir -p /opt/mymono
Me@mewin8 ~
$ cd /opt
Me@mewin8 /opt
$ git clone https://github.com/mono/mono.git
Me@mewin8 /opt
$ cd mono
Me@mewin8 /opt/mono
$ git submodule init
用于Windows的cygwin控制台下载单声道(在从cygwin编译单声道时你将需要它):http://download.mono-project.com/archive/3.2.3/windows-installer/mono-3.2.3-gtksharp-2.12.11-win32-0.exe
在C:\ cygwin \ opt \ mono323中安装适用于Windows的单声道
再次访问cygwin控制台并运行以下命令:
Me@mewin8 /opt/mono
$ git checkout --track origin/mono-3.4.0-branch
Me@mewin8 ~
$ cd /opt/mono
Me@mewin8 /opt/mono
$ export PATH=$PATH:/opt/mono323/bin
Me@mewin8 /opt/mono
$ ./autogen.sh --host=i686-pc-mingw32 --prefix=/opt/mymono/
编译以错误结束。请参阅此主题:mono from git will not build on cygwin 32 解决方案:
Me@mewin8 /opt/mono
$ make
注释掉这一行Me@mewin8 /opt/mono
$ vim /usr/i686-pc-mingw32/sys-root/mingw/include/ddk/ntapi.h
如果您按照与我相同的步骤操作,则要注释掉的行应该是数字49.您必须完成typedef PVOID PEXECUTION_STATE;
重新开始编译:
//typedef PVOID PEXECUTION_STATE;
Me@mewin8 /opt/mono
$ make clean
Me@mewin8 /opt/mono
$ make
您可以在此路径中找到所需的库(实际上您已完成两个):
实施using Boehm GC:Me@mewin8 /opt/mono
$ make install
实施using SGen GC:/opt/mymono/bin/libmonoboehm-2.0.dll
您可以创建如下符号链接:/opt/mymono/bin/libmonosgen-2.0.dll
;或者像这样:/opt/mymono/lib/libmono-2.0.dll -> /opt/mymono/bin/libmonoboehm-2.0.dll
(无论对你有用)
根据您使用图书馆的方式,符号链接可能对您有意义。
此外,如果gcc / ld在尝试构建自己的程序时可能找不到你的库(我的意思是你要嵌入单声道的程序),你试图从cygwin控制台编译你可以做这样:
/opt/mymono/lib/mono-2.0.dll -> /opt/mymono/bin/libmonoboehm-2.0.dll
请参阅:man ld
这就是我所知道的。希望它会帮助你......至少我尽力了!