[Mono-dev] Compiling mono on windows for developing (not running)
Alex J Lennon
ajlennon at dynamicdevices.co.uk
Mon May 5 02:20:47 UTC 2014
Ned,
On 04/05/2014 23:11, Edward Ned Harvey (mono) wrote:
>> From: mono-devel-list-bounces at lists.ximian.com [mailto:mono-devel-list-
>> bounces at lists.ximian.com] On Behalf Of Miguel de Icaza
>>
>> To build Mono on Windows, you will need to use Cygwin to build you entire
>> stack. Cygwin is a Unix-on-Windows system that will let you properly build
>> Mono.
> Any pointers on how to get that to work? I am nothing, if not helpful at documenting some process and then sharing it for others - I was motivated to get this working, I spent about a day on it last Sunday, and failed. I never got a successful build.
>
> I tried cygwin 32 bit, 64 bit... I tried git checkout with sourcetree somewhere on C: but I found there were line endings problems, and I found some things on the internet suggest you need to use cygwin binaries (install cygwin git) to checkout to a cygwin mount (for example in your home directory) and in fact, I found that solved the line endings problem, so I think that was a good move...
This is where I arrived at yesterday. I now have Mono compiled on
Windows from the 3.4.0 release tarball and yesterday's Git master commit.
NB. There was a problem with my previous set of instructions. /usr/local
must not be mounted during the build or it seems to result in libiconv
errors. Instead it should be mounted just before the install.
Best Regards,
Alex
------------------------------------------------------------------------
Building Mono on Win32/Cygwin
=============================
(1) Install Cygwin
Run setup-x86.exe to install Cygwin -
http://www.cygwin.com/setup-x86.exe
Follow instructions from "Compiling Mono on Windows" to install needed
packages
http://www.mono-project.com/Compiling_Mono_on_Windows
autoconf
automake
bison
gcc-core
gcc-g++
mingw-gcc
libtool,
make
python,
Nice to have's
+ wget, zip patch, openssh, vim
NOTE: In addition to this you will need the following as per these
instructions
http://www.codeproject.com/Articles/19575/Building-Mono-on-Windows-the-final-battle
gettext-devel
intltool
libiconv
pkg-config
2) Install working Mono binaries
Use the installation executable from go-mono.com, at time of writing:
http://download.mono-project.com/archive/3.2.3/windows-installer/mono-3.2.3-gtksharp-2.12.11-win32-0.exe
For me this gives a working Mono in C:\Program Files (x86)\Mono-3.2.3 on
a Windows 8.1 / x64 host
(3) Grab new Mono sources
------------------------------------------------------------------------
(a) From source tarball
====================
(i) Download and Extract
Download the tarball you wish to use from
http://download.mono-project.com/sources/mono/
At the time of writing we are using 3.4.0:
http://download.mono-project.com/sources/mono/mono-3.4.0.tar.bz2
Do not extract the source tarball with native Window tools as this
appears to affect line endings, which will cause problems.
To extract within Cygwin first run the Cywgin environment (Cygwin
terminal on your start bar) and extract with,
tar xjvf mono-3.4.0.tar.bz2
This will give you a mono-3.4.0 directory
(ii) Create baseline destination
Create a destination folder, where we are going to install the newly
built Mono, in this case C:\Mono-3.4.0
Copy across files from your existing installation (e.g. Mono-3.2.3) to
the 3.4.0 folder to give us a baseline
NOTE: It is important not to have spaces in the path as otherwise the
Mono build will fail, so we're putting this in the root of C: for this
example
(From my reading it is also likely to be important not to
have Windows user names with spaces in them, so a heads-up there...)
(iii) Autogen the build
./autogen.sh --prefix="C:\Mono-3.4.0" --with-preview=yes
(iv) Configure the build
./configure --host=i686-pc-mingw32
At the end of this process, with the defaults, you should see something like
mcs source: mcs
Engine:
GC: sgen and bundled Boehm GC with typed GC and
parallel mark
TLS: pthread
SIGALTSTACK: no
Engine: Building and using the JIT
oprofile: no
BigArrays: no
DTrace: no
LLVM Back End: no (dynamically loaded: no)
Libraries:
.NET 2.0/3.5: yes
.NET 4.0: yes
.NET 4.5: yes
MonoDroid: no
MonoTouch: no
Xamarin.Mac: no
JNI support: no
libgdiplus: assumed to be installed
zlib: system zlib
(v) We're ready to build mono
You can go ahead and try 'make' now but at the time of writing
(03/05/2014) there is a problematical interaction between the Cygwin
headers and the Mono build
This will lead to an error along the lines of,
/usr/i686-pc-mingw32/sys-root/mingw/include/ddk/ntapi.h:49:15: error:
conflicting types for 'PEXECUTION_STATE'
In file included from
/usr/i686-pc-mingw32/sys-root/mingw/include/windows.h:62:0,
from
/usr/i686-pc-mingw32/sys-root/mingw/include/winsock2.h:40,
from ../../mono/io-layer/io-layer.h:24,
from ../../mono/metadata/domain-internals.h:15,
from ../../mono/metadata/metadata-internals.h:8,
from ../../mono/metadata/class-internals.h:10,
from ../../mono/metadata/object-internals.h:8,
from process.c:16:
A workaround is to edit the Cygwin header file ntapi.h (e.g.
C:\cygwin\usr\i686-pc-mingw32\sys-root\mingw\include\ddk\ntapi.h) to
rename PEXECUTION_STATE to PEXECUTION_STATE_KLUDGE, say.
Then,
make
(this will take some time )
NOTE: There seems to be an intermittent issue linking against libiconv
(even when present) relating to shared libraries.
If you see this try,
make clean
make
(vi) Install mono
Mount your destination folder under Cygwin as /usr/local with
mount "C:\Mono-3.4.0" /usr/local
NOTE: Do not have /usr/local mounted when performing the previous make
step or you will see the following build error:
*** Warning: Trying to link with static lib archive
/usr/local/lib/libiconv.a.
As a check you can 'ls /usr/local' which should show the files that you
have in C:\Mono-3.4.0
...
At the time of writing (04/05/2014) there is a missing file in the Mono
3.4.0 release tarball. This causes installation failure.
ref:
http://stackoverflow.com/questions/22844569/build-error-mono-3-4-0-centos
To add the missing file create a new file in mcs/tools/xbuild/targets/
called Microsoft.Portable.Common.targets
This should contain the following
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\Microsoft.Portable.Core.props" />
<Import Project="..\Microsoft.Portable.Core.targets" />
</Project>
Then ensure that /usr/local is correctly mounted as per 3(b)(ii) and run
make install
(vii) Fix "missing" mono.exe
The installation removes the existing mono.exe from the
C:\Mono-3.4.0\bin directory and does not seem to copy across a new version
Within the Cygwin environment there is a "mono.exe" which is a symbolic
link to mono-sgen.exe, which is rebuilt.
So, assuming that under Win32 the mono.exe is a stub executable (which
it seems to be as it is small) it should be reasonable to copy
across mono.exe from the older mono installation
e.g. Copy C:\Program Files (x86)\Mono-3.2.3\bin\mono.exe to
C:\Mono-3.4.0\bin
(vii) Check installation
Open a Windows cmd box, cd to C:\Mono-3.4.0 and run
mono --version
This should show something like
Mono JIT compiler version 3.4.0 (tarball)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors.
www.mono-project.com
TLS: normal
SIGSEGV: normal
Notification: Thread + polling
Architecture: x86
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
(viii) Enable Xamarin Studio to add the new Mono runtime
If you to to Xamarin Tools->Options and try to add the Mono-3.4.0 folder
it will fail to detect Mono.
This is because of the presence of an installed symlink file, bin\mono
So, for example, delete the file C:\Mono-3.4.0\bin\mono and you will
then be able to add the runtime to Xamarin Studio
There is an archive of the binaries resulting from my build here,
http://www.dynamicdevices.co.uk/downloads/Mono-3.4.0.zip
NOTE: That Mono 3.x fails to build projects for me with recent Xamarin
Studio builds giving the error
Build failed. Could not find type 'System.Globalization.SortVersion'.
This appears to be addressed in this commit which is not present in 3.4.0
http://stackoverflow.com/questions/23448795/build-failed-could-not-find-type-system-globalization-sortversion
The workaround is to use an older version of Xamarin Studio as discussed
here
http://stackoverflow.com/questions/23448795/build-failed-could-not-find-type-system-globalization-sortversion
i.e. Download Xamarin Studio 4.2.3 from your account at Xamarin.com with
"view all versions"
NOTE: You may then get a build error about UNC paths
error : Error building target GetReferenceAssemblyPaths: UNC paths
should be of the form \\server\share.
This appears to relate to extra \\'s in configuration files as discussed
here
http://stackoverflow.com/questions/19933266/error-building-c-sharp-solution-using-xbuild-mono
The workaround is to go to project options and unback "Use MSBuild
engine" at which point you will be able to compile and debug applications
------------------------------------------------------------------------
(b) From Git repository
====================
(i) Checkout Mono using Git within Cygwin. Don't use Subversion as I
have seen build problems which I think are because sub-modules are not
checked out with Subversion.
e.g.
cd c:/
git clone git://github.com/mono/mono.git
NOTE: We are working with Git rev
47db8f756f409cd56d207b550ead42a156ad5a01 at present
(This will take some time and checkout to a mono folder)
(ii)
>From here the steps are similar to those above. i.e. Follow the above
steps in (a) (ii) - (v) to create a baseline, autogen, configure and make
NOTE: Ensure /usr/local is not mounted for the build, as discussed above
NOTE: As in the build instructions for the Mono 3.4.0 source archive,
above, you will need to rename the Cygwin header variable definition
PEXECUTION_STATE in the file
C:\cygwin\usr\i686-pc-mingw32\sys-root\mingw\include\ddk\ntapi.h to
something else e.g. PEXECUTION_STATE_KLUDGE.
e.g. With baseline copy of older mono in C:\Mono-3.4.0
./autogen.sh --prefix="C:\Mono-3.4.0" --with-preview=yes
./configure --host=i686-pc-mingw32
make
(this will take some time)
mount "C:\Mono-3.4.0" /usr/local
make install
Copy across mono.exe to bin folder from older installation
Delete mono file in bin folder
There's an archive of binaries for 3.4.10-master-47db8f7 here
------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20140505/7fc8a333/attachment-0001.html>
More information about the Mono-devel-list
mailing list