gdtltr@freezer.it.udel.edu (Gary Duzan) (10/10/90)
Is it just me, or is the fact that "cc -lm mmnn.c" doesn't work but
"cc mmnn.c -lm" does extremely non-intuitive? Last I heard, the general
idea was to have <command> <flags> <filename(s)>. I know at least one
compiler has fixed this, but others, including GCC (at least our version)
haven't.
Gary Duzan
Time Lord
Third Regeneration
--
gdtltr@freezer.it.udel.edu
_o_ -------------------------- _o_
[|o o|] An isolated computer is a terribly lonely thing. [|o o|]
|_O_| "Don't listen to me; I never do." -- Doctor Who |_O_|
nieters@phobos.crd.ge.com (coolbean) (10/17/90)
; ; Is it just me, or is the fact that "cc -lm mmnn.c" doesn't work but ; "cc mmnn.c -lm" does extremely non-intuitive? [....] ; well, yes and no. yes if you view a library as a simple .o object file, no if you view a library as it's truly meant to be. when you compile an executable and include a library file, _only_ those entries in the library that are needed (ie. referenced) are extracted and included in the output. (if you don't believe this, write a one line program that calls log2() from the math library "-lm," for example and, using nm(1), search the executable's symbol table for some other math function such as "pow". it shouldn't be in there, but "log2.o" should be.) if this functionality wasn't the case, then the entire library would be pulled in even though it contains unused functions and executable size would be huge. now most compilers deal with files in the order they are encountered on the command line. when a library archive file occurs, it is searched exactly once and only those archive entries which match an unresolved external referece are extracted and concatenated to the output. so, getting back to your example "cc -lm mmnn.c" ... the compiler gets "-lm" first, searches it and finds no archive entries corresponding to unresolved external references. therefore no entries are pulled out and the next file - mmnn.c - is dealt with. references in this file to entries in the math library can't be resolved since the compiler has "forgotten" about the math library itself. hence, the command line must be "cc mmnn.c -lm". the only way i could think of that a compiler could deal with the first (non-working) example, is to either "save" a pointer/descriptor to the library file and, after all "normal" files have been handled, search the library to resolve any unresolved external references. hope this helps. --ed -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Ed Nieters INTERnet: nieters@crd.ge.com GE Corporate R&D UUCPnet: uunet!crd.ge.com!nieters Schenectady, NY 12301 BELLnet: (518) 387-5187