Solved

static variables

Posted on 1998-08-17
10
245 Views
Last Modified: 2011-09-20
This question might have to do with some knowledge of AIX4.2.x based C++ compiler(xlC_r). I am new to this environment. here it goes:

i've a C++ class file with a certain static variable(say "astat". this goes into a shared library and this library is linked into an executable.
now when I run this executable(the file that intializes/defines this static var is part of only the shared library), i find 2 addresses for the static varible "astat" when accessed from 2 different functions.  why would  this happen ??

if you are familiar with AIX's makeC++SharedLib_r/xlC_r to create shared libs and executables respectively, is there a link line option to supress these multiple copies ?
0
Comment
Question by:rajaram
  • 5
  • 4
10 Comments
 
LVL 2

Expert Comment

by:mlev
ID: 1170569
The definition/initialization isn't in a header file, right?
0
 

Author Comment

by:rajaram
ID: 1170570
here it goes:

file:  hdr.h
       -----

class A {
  private:
    static sp var1;      // sp - a struct definition.
  public:
    ..
    ..
    stativ void initVars();
    static void someOperation();
    ..
    ..
};
________________________________________________________________

file  impl.cpp
      --------

sp A::var1;

void A::initVars() {
   // initialize the static varible
};

void A::someOperation() {
   // this function is accessed by various routines to
   // use/manipulate the stativ var
};

.
.
____________________________________________________________


0
 
LVL 3

Expert Comment

by:xyu
ID: 1170571
Did You tell to the compiler & linker that class A is expoted/imported any way ???
0
 
LVL 3

Expert Comment

by:xyu
ID: 1170572
I see additional problem in Your code ... You have to specify initializer to You static variable... nobody garanted order of initialization of statics
0
 

Author Comment

by:rajaram
ID: 1170573
1st comment :
i have not used any options which will tell the compiler/linker to export/import these files. frankly i dont know if I have to
do it or how to export/import files ?

2nd comment:

please see the .cpp file. the first line (sp A::var1;) should
do. atleast this works on SOLARIS/HPUX/WIN-NT.
do i've to equate it to NULL or something ??
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 3

Expert Comment

by:xyu
ID: 1170574
2 nd comment... its good practice to specify initializer (constructor) for static variable (by stabdard it have to be zerroed, but i'v seen alredy 2 cases where it wasn't 0) :)

look at documentation on Your compiler for keywords export/import, _export/_import ... it may help You... I don't have compiler here so i can't check it ... but export/import is standard keyword... so check it.. and shoe me the results if any... i'll help You then  
0
 

Author Comment

by:rajaram
ID: 1170575
i'll hunting for the compiler/linker documentation. once i get
them i'll try and let you know.
thanks.
0
 
LVL 3

Expert Comment

by:xyu
ID: 1170576
the suggestion is the next try to do like that

in hdr.h

#ifndef HDR_DECLSPEC
  #define HDR_DECLSPEC _export
#endif

class HDR_DECLSPEC A {
  private:
    static sp var1;      // sp - a struct definition.
  public:
    ..
    ..
    stativ void initVars();
    static void someOperation();
    ..
    ..
};

and before using in in the main (non-shared part of the program)
do
#define HDR_DECLSPEC _import

it may help
0
 

Author Comment

by:rajaram
ID: 1170577
WHEN does one require to export/import files ?
btw, this is an encouraging suggestion. thanks!

Coming from a SOLARIS background, i've never understood the
logic/reason behind export/import of files(if possible please
answer the "WHEN" part).

great suggestion!!
0
 
LVL 3

Accepted Solution

by:
xyu earned 120 total points
ID: 1170578
I make it as answer... so i could get some points :)

ok..

when You specifying _export You are not exporting the file You just instruct compiler to generate class code that way that it can berecognized by linker as exportable for generation of export tables of shared module... the same way when You specifying _import You instruct the compiler not to jenerate any implementation of class methods and VFT and class statics but prepere information for linket to import it ...

so in the shared module source it should look like that
class _export Foo {...}

and in main module (that using the shared one):
class _import Foo {...}

so example i gave to You before shows one of the ideas to provide this difference...

try it on Your compiler (it may work)
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now