In the hope that it may be helpful to other Windows developers, I've included below some simple notes about integrating ROOT with Visual Studio.NET. Don't take this as gospel; its simply based on my experiences with using ROOT together with Visual Studio.NET to do physics analysis. I don't develop ROOT (i.e. I'm not constantly recompiling the ROOT source code); I simply use the ROOT source code and libraries "as-is" in my own projects. Manifest of attached files -------------------------- root-3-04-02-vs_net_langston2.patch Patch file of changes necessary to build ROOT 3.04.02 using VC++.NET. build.sh Simple build script that I use to build ROOT using VC++.NET. vsvars7.sh Set PATH, LIB and INCLUDE environment variables for VC++.NET. vsvars6.sh Set PATH, LIB and INCLUDE environment variables for VC++ 6.0. dfvars.sh Set PATH, LIB and INCLUDE environment variables for Compaq Visual Fortran 6. Notes ----- 1. VC++.NET projects can use the VC++ 6.0 binaries from the official ROOT web site without any problems. 2. Only relatively recent versions of ROOT can be successfully compiled with Visual Studio.NET. For example, I had lots of trouble building ROOT 3.03.09 with VC++.NET, and eventually just fell back to using the VC++ 6.0 binaries in my .NET projects. However, I had relatively little trouble building ROOT 3.04.02 with VC++.NET. 3. I build the Fortran stuff that comes with ROOT using Compaq Visual Fortran 6.6b. I use three libraries from "Cernlib Release 2001": kernmd.lib, packmd.lib and shiftmd.lib. I download them from http://wwwinfo.cern.ch/asd/cernlib/download/2001_wnt/lib/. Because Cygwin has problems with spaces in file and folder names (see item 6 below), I put kernmd.lib, packmd.lib and shiftmd.lib in $ROOTSYS\hbook. You will need to apply my patch (attached to this email) to get ROOT's configure script to find these libraries. 4. There are problems using the newer linker that ships with VC++.NET with fl32 (the Compaq Fortran compiler). The problem is that fl32 tries to implicitly pass the option /ignore:505 to link.exe, but 505 is no longer a valid number under VC++.NET. The fix is to juggle the PATH and LIB environment variables around a bit, but this is taken care of in my patch (attached to this email). 5. People seem to get themselves into a lot of trouble by having their PATH, LIB and INCLUDE environment variables set improperly. Carefully go through each of these environment variables and remove everything having to do with VC++ 6.0, VC++.NET and Compaq Visual Fortran 6.6 (and in the future when you install Visual Studio, don't select the option to automatically register these environment variables). Instead, either use Microsoft's .bat scripts (vsvars7.bat, vsvars6.bat and dfvars.bat) or my .sh scripts (vsvars7.sh, vsvars6.sh and dfvars.sh) to manually set the PATH, LIB and INCLUDE environment variables. My .sh scripts are attached to this email. Even after all of this, Cygwin has bugs whereby executables are found out of PATH order, even if you think you've cleared the cache with "hash -r". The solution is to use the kludge in my build.sh script (attached to this email). 6. The ROOT build system requires a Cygwin installation, but neither ROOT nor Cygwin deal very well with spaces in file and folder names (which are ubiquitous on a Windows computer). Even though its not the "Microsoft way", its best to both build and install ROOT just below a drive specification. For example, my current version of ROOT was built and installed in "c:/root-3-04-02". However, even doing this won't help you with the run-time errors you will get if you do file I/O with a file specification that contains spaces. I therefore use the following construct whenever I do ROOT I/O on Windows: String* old_DirectoryName = Environment::CurrentDirectory; Environment::CurrentDirectory = "file specification with spaces"; // ROOT I/O calls go here. Environment::CurrentDirectory = old_DirectoryName; I hope these notes and scripts might help other Windows developers. Warmest regards, Matt -- Matthew D. Langston SLD, Stanford Linear Accelerator Center langston@SLAC.Stanford.EDU
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET