Re: [ROOT] Libraries (What about Windows ?)

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Sat Apr 15 2000 - 03:58:30 MEST


Hi Valery and other ROOT'ers of the world,  

On Fri, 14 Apr 2000 18:21:41 -0400 "Valeri Fine (Faine)" <fine@bnl.gov> wrote:
> I am just curious did anybody see such sort of problem for Windows ?

AFAIK, no. But that doesn't mean it's not there. 

On Windoze, you still have no way of knowing what is in a Dynamical
Loadable Library (DLL, or on Unix's: Shared Library), just by looking
at the name. You _must_ use _some_ utility to get that information. 

Now, I've no idea what's avaliable in Micros**t Visual C++, but as far
as I remember there is some shell utility that list the symbols in the
library. You should think that the "quickviewer" should do the job,
after all Windoze is suppose to be "user friendly" isn't it, but no
surprise, it doesn't. And wether the supposed utility of Micros**t
Visual C++ know how to demangle I do not know. In any case, ASAIK, the
utility is a shell application i.e., you have to open a "DOS" prompt
and play around in that one - which is enough for many Windoze users
to go haywire. 

CygWin, being a GNU port to Windoze, _has_ the previously mentioned
utility "nm", just like on Linux. However, you can not apply this
utility to a DLL created by Micros**t Visual C++ for some, to me
unknown, reason. And ofcourse the CygWin "nm" knows how to demangle
C++ symbols. 

You may think having the export files around would  help you, but they
really don't. You still have to locate the symbol you're looking
for. Well first instinct: Use the "Find Files and Folders" entry in
the start menu of Windoze and search for a "*.exp" with an occurence
of the sought symbol - however, it will probably not work. The reason:
The symbols listed in the export libraries are mangled! Hence you
really need to know the mangling of your compiler (and who does), to
use this method efficiently. 

So we're back to square one: 

* You have to use some utility to look throughthe symbols in the
  libraries.    
  - Micros**t Visual C++ may have such a utility. 
  - CygWin has "nm" which also does demangling. 

* Yoy probably want to do a query on the output from the utility, to
  select one and only one library. 
  - It's not apparent how you an do that using standard Windoze
    utilities. "Find ..." doesn't work. You probably have to manually
    browse - using a "DOS" prompt application - through all possible
    candidates your self.    
  - CygWin supplies "grep", so you can set up a nice pipeline (as you
    would in Unix's) to select the library needed: 
    
       cygwin prompt% nm -C Root_*.lib | grep "TParticle" | \ 
		      grep -v "        U " | less    

In short: You're not better of using Windoze, compared to Unix's. In
fact, using Micros**t Visual C++, you're probably doing worse. So if
you insist on using Windoze (remember the anti-trust conviction?), you
should use CygWin to get the optimum development environment. This, of
course is old news. Maybe I'd be a good thing for the ROOT team also
to dsitribute binary releases for the Windoze/CygWin combination as
well as the Windoze/Micros**t Visual C++. Maybe you could do that
Valery? 

Anyway, that's my two pennies worth. Back to you Valery. 

Christian  -----------------------------------------------------------
Holm Christensen                             Phone:  (+45) 35 35 96 91 
  Sankt Hansgade 23, 1. th.                  Office: (+45) 353  25 305 
  DK-2200 Copenhagen N                       Web:    www.nbi.dk/~cholm    
  Denmark                                    Email:       cholm@nbi.dk
  



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:23 MET