Hello I've written on VC6 vs Vc7 issue. There are TWO different questions here. 1. The first has nothing to do with Vc6 to VC7 migration. By some historical reason the compiler that is used to compile ROOT for Windows was marked as non-ANSI compiler. That is set via RConfig.h #define R__ANSISTREAM CPP macro. That entailed some problem within code. Missing flag caused few problems with VC6 but gave me a lot of problems to compile the code that includes templates and C++ streams. Defining "R__ANSISTREAM" has helped with both compilers namely VC6 and Vc7 . However it gives a "side effect" mixing codes compiled With "R__ANSISTREAM" defined and the codes those were compiled with R__ANSISTREAM undefined. I would like to call your attention it does NOT matter whether compiler was VC6 or Vc7 I DOES matter whether the compilation was performed with "R__ANSISTREAM" flag "on" or "off". The reason for the troubles is the object file built-in default name of the VC<x> run-time DLL that should be loaded at run time. This named is defined either "useoldio.h" or "use_ansi.h" header files from the MS include directory (see the source of both files below) To avoid the problem we have to migrate to "R__ANSISTREAM" flag and stick with that on both side I mean both the core ROOT code as well as the user code must be compiled in consistent way. To assure this one has to be careful using the ROOT-provided header files for "streams" ONLY rather the standard ones. For example "Riostream.h" instead of <iostream> AND link against of the proper run time library. This means in the example $ROOTSYS/test/Makefile.win32 the file name "msvcirt" MUST be replaced with "msvcprt" My experience these two simple things namely "R__ANSISTREAM" and "msvcprt" do solve all problems and do allow to mix the codes compiled with either compiler. 2. Another issue is the bugs within Vc7 compiler. I have some testes (ROOT macros) those gave no meaningful result with ROOT compiled with Vc7 and made a very good ones just I used exactly the same ROOT version but compiled with Vc6. Pay your attention the regular ROOT testes were Ok in both cases. So my proposal 1. ROOT should migrate to provide the distribution compiled with "R__ANSISTREAM" 2. ROOT should, stay away of Vc7 till the next "Service Pack" ---------- Attachment ---------------- C:\Program Files\Microsoft Visual Studio .NET\Vc7\include>dir *use* Volume in drive C has no label. Volume Serial Number is 7C43-7FC0 Directory of C:\Program Files\Microsoft Visual Studio .NET\Vc7\include 06/25/2001 08:28 PM 1,556 useoldio.h 06/25/2001 08:28 PM 933 use_ansi.h 2 File(s) 2,489 bytes 0 Dir(s) 1,478,737,920 bytes free C:\Program Files\Microsoft Visual Studio .NET\Vc7\include>type useoldio.h /*** *useoldio.h - force the use of the Microsoft "classic" iostream libraries. * * Copyright (c) 1996-2001, Microsoft Corporation. All rights reserved. * *Purpose: * Generates default library directives for the old ("classic") IOSTREAM * libraries. The exact name of the library specified in the directive * depends on the compiler switches (-ML, -MT, -MD, -MLd, -MTd, and -MDd). * * This header file is only included by other header files. * * [Public] * ****/ #ifndef _USE_OLD_IOSTREAMS #define _USE_OLD_IOSTREAMS #ifndef _M_IA64 /* * Warning C4995, '_OLD_IOSTREAMS_ARE_DEPRECATED' is a deprecated name, is * being issued because the old I/O Streams headers iostreams.h et al will no * longer be supported from VC8. Replace references such as #include * <iostreams.h> with #include <iostreams>, using the new, more conformant, I/O * Streams headers. */ #pragma deprecated(_OLD_IOSTREAMS_ARE_DEPRECATED) extern void _OLD_IOSTREAMS_ARE_DEPRECATED(); #endif /* _M_IA64 */ #ifdef _MT #ifdef _DLL #ifdef _DEBUG #pragma comment(lib,"msvcirtd") #else /* _DEBUG */ #pragma comment(lib,"msvcirt") #endif /* _DEBUG */ #else /* _DLL */ #ifdef _DEBUG #pragma comment(lib,"libcimtd") #else /* _DEBUG */ #pragma comment(lib,"libcimt") #endif /* _DEBUG */ #endif /* _DLL */ #else /* _MT */ #ifdef _DEBUG #pragma comment(lib,"libcid") #else /* _DEBUG */ #pragma comment(lib,"libci") #endif /* _DEBUG */ #endif #endif /* _USE_OLD_IOSTREAMS */ C:\Program Files\Microsoft Visual Studio .NET\Vc7\include>type use_ansi.h /*** *use_ansi.h - pragmas for ANSI Standard C++ libraries * * Copyright (c) 1996-2001, Microsoft Corporation. All rights reserved. * *Purpose: * This header is intended to force the use of the appropriate ANSI * Standard C++ libraries whenever it is included. * * [Public] * ****/ #if _MSC_VER > 100 #pragma once #endif #ifndef _USE_ANSI_CPP #define _USE_ANSI_CPP #ifdef _MT #if defined(_DLL) && !defined(_STATIC_CPPLIB) #ifdef _DEBUG #pragma comment(lib,"msvcprtd") #else // _DEBUG #pragma comment(lib,"msvcprt") #endif // _DEBUG #else // _DLL && !STATIC_CPPLIB #ifdef _DEBUG #pragma comment(lib,"libcpmtd") #else // _DEBUG #pragma comment(lib,"libcpmt") #endif // _DEBUG #endif // _DLL && !STATIC_CPPLIB #else // _MT #ifdef _DEBUG #pragma comment(lib,"libcpd") #else // _DEBUG #pragma comment(lib,"libcp") #endif // _DEBUG #endif #endif // _USE_ANSI_CPP > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch] > On Behalf Of Fons Rademakers > Sent: Wednesday, February 26, 2003 7:25 AM > To: Rene Brun > Cc: Axel Naumann; Heather Kelly; roottalk@pcroot.cern.ch > Subject: Re: [ROOT] ROOT 3.04.02 and Visual .Net > > I've just install VC .NET on my XP vmware machine and will try to build > binaries using Matt's recipes. If successful we will distribute these > binaries too. > > -- Fons > > > On Tue, 2003-02-25 at 22:10, Rene Brun wrote: > > Hi Axel, Heather, Matt and .NET fans, > > > > There is nothing wrong having a public discussion on this topic. > > I think that it is good to know that there are users looking > > to migration issues to .NET. > > I trust you to make a good investigation et propose solutions. > > We will include in the sources all changes that you will feel relevant > > once there is a consensus. > > > > Rene > > > > > > On > > Tue, 25 > > Feb 2003, Axel Naumann > > wrote: > > > > > Hi, > > > > > > I managed to build root with .NET without any problems; I didn't come > > > around testing whether linking VC6 libs within .NET works. So I have > not > > > had this problem because I've never tried it. > > > > > > Either way: The standard c++ lib for .NET and VC6 differ, so my > > > assumption would be (now, it wasn't a few weeks ago) that cross > linking > > > will only work when using the backward compatible .NET std lib - which > > > doesn't sound like a good idea, because that gives you the same buggy > > > lib people were fighting with under VC6. > > > > > > As Rene might not like a public discussion on this (it's not a bug > > > report as .NET is not supported, and .NET is so buggy that supporting > it > > > and adding 100 work-arounds won't really pay off), we should maybe > > > migrate it to a closed forum. Valeri: Have you seen this? Did you test > it? > > > > > > Either way, building root from sources with .NET instead of using the > > > binary distribution for VC6 should get rid of this problem. > > > > > > Cheers, Axel. > > > > > > Heather Kelly wrote: > > > > Hi, > > > > > > > > I have seen plenty of discussion concerning ROOT & Visual .Net - we > are > > > > using ROOT 3.04.02 on Windows. > > > > It was my understanding from previous posts that one could link > against > > > > the ROOT binaries compiled with VC6. > > > > However, we have run into trouble when compiling/linking (using > Visual > > > > .Net) our ROOT I/O classes against ROOT 3.04.02 (compiled with VC6), > > > > specifically related to TObject::SavePrimitive: > > > > > > > > mcRootData.arc(McPositionHit.obj) : error LNK2001: unresolved > external > > > > symbol "public: virtual void __thiscall TObject::SavePrimitive(class > > > > std::basic_ofstream<char,struct std::char_traits<char> > &,char > const > > > > *)" > > > > > (?SavePrimitive@TObject@@UAEXAAV?$basic_ofstream@DU?$char_traits@D@std@@ @s > td > > > > @@PBD@Z) > > > > > > > > > > > > Clearly, others have not had this problem...is there a known cause > for > > > > this? and is there an easy fix? > > > > > > > > Thanks, > > > > Heather > > > > -- > Org: CERN, European Laboratory for Particle Physics. > Mail: 1211 Geneve 23, Switzerland > E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 > WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET