[comp.sys.sun] Problems with globals in more than one file of a library

levy@uunet.uu.net (Daniel R. Levy) (07/14/90)

I have a situation where I would like several routines in a library to set
a global variable, which may or may not be declared in the program which
uses the library.  I also would like to be able to optionally compile a
program that does reference the global variable with a different version
of the library which does not reference the global variable.

Most C compiler/linker systems I have used (on UNIX systems) honor the
practice of declaring (uninitialized) globals in more than one file,
though the strictly correct usage is to declare the global in only one
file and declare externs in the rest.  My trouble is that I can't take the
strictly correct approach with my requirements above, declaring the global
in only one place.  Since I can't know whether a program calling a routine
in the library is going to declare the global variable, I cannot just
declare the variable as extern in the library routines or there may be
link errors.  Also, since I can't know whether a program using the global
will be linked with my special library (without some pain) I cannot just
declare the variable as extern in the program without similarly risking
link errors.

This has caused me some real hassle on a Sun4 running SunOS 4.0.3 (I don't
know how to ask the compiler what version it is and "what" isn't very
helpful).  The use of the non-strictly-correct approach (declaring the
global in all files) SOMETIMES results in the setting of a global in the
library routine not being visible (!) in the program calling it.  Yes,
this is without any optimization in compiling both the library and the
program.  The addresses of the supposedly identical globals are wildly
different when this happens.  Changing the declaration in the program to
extern "fixes" the problem but as I mentioned above this is not acceptable
as a long term solution because I'd like to compile that same program with
a library that doesn't declare the global.

Now I could complain to Sun, but first I want to know, is there some
evidence that this usage of multiple declarations of externs is
"supported"?

 Daniel R. Levy * Memorex Telex * Naperville IL * ..!uunet!tellab5!mtcchi!levy
So far as I can remember, there is not one      ... therefore be ye as shrewd
word in the Gospels in praise of intelligence.  as serpents and harmless as
-- Bertrand Russell [Berkeley UNIX fortune]     doves -- God [Matthew 10:16]