Re: [Flightgear-devel] gnu linker question (don't optimize unused variables)

2010-04-16 Thread Torsten Dreyer
 It's not optimizing the variable, it's optimizing the entire .o file out of
 the linkage, as nothing external is explicitly using any of the symbols in
 the .o. 
Ah - that explains a lot!
 
 No. Either build gnucap as a shared library or add some dummy references to
 symbols in the file(s) that are referenced, perhaps indirectly, by code
 outside of the library.
Ok, thanks, at least I have a clue now where to look. I'll think about it...

Torsten

--
Download Intel#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
___
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel


[Flightgear-devel] gnu linker question (don't optimize unused variables)

2010-04-15 Thread Torsten Dreyer
Hi,

this is a question for the gnu linker geek:

I am trying to add gnucap to FlightGear as posted before. It compiles cleanly 
and links fine, but there is one issue. Gnucap uses commands which are 
implemented in separate files. These commands get registered into a global 
command registry. Here is a code snipped for the clear command:

class CMD_CLEAR : public CMD {
public:
  void do_it(CS, CARD_LIST* Scope)  {
// .. do something fancy here
  }
} p0;
DISPATCHERCMD::INSTALL d0(command_dispatcher, clear, p0);

The class CMD_CLEAR implements the CMD interface which requires the do_it() 
function. 
The DISPATCHER template contains a INSTALL class, it's constructor performs 
the registration into the registry. In theory, when the INSTALL class is 
instantiated as d0, the actions in the constructor are performed.
Unfortunately, this does not happen when linked against FlightGear.
I tried to rename d0 into something more uniqe and grep'ed the created object 
and library for the variable which were found there, but not in the fgfs 
executable. This lead me to the conclusion, that the linker optimizes the 
unused variable from the executable.

Is there any magic switch to pass to the g++ linker telling him not to 
optimize unused variables, preferably for a certain set of files or a single 
library?

  Torsten

--
Download Intel#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
___
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel


Re: [Flightgear-devel] gnu linker question (don't optimize unused variables)

2010-04-15 Thread Tim Moore
On Thu, Apr 15, 2010 at 10:59 PM, Torsten Dreyer tors...@t3r.de wrote:

 Hi,

 this is a question for the gnu linker geek:

 I am trying to add gnucap to FlightGear as posted before. It compiles
 cleanly
 and links fine, but there is one issue. Gnucap uses commands which are
 implemented in separate files. These commands get registered into a global
 command registry. Here is a code snipped for the clear command:

 class CMD_CLEAR : public CMD {
 public:
  void do_it(CS, CARD_LIST* Scope)  {
 // .. do something fancy here
  }
 } p0;
 DISPATCHERCMD::INSTALL d0(command_dispatcher, clear, p0);

 The class CMD_CLEAR implements the CMD interface which requires the do_it()
 function.
 The DISPATCHER template contains a INSTALL class, it's constructor performs
 the registration into the registry. In theory, when the INSTALL class is
 instantiated as d0, the actions in the constructor are performed.
 Unfortunately, this does not happen when linked against FlightGear.
 I tried to rename d0 into something more uniqe and grep'ed the created
 object
 and library for the variable which were found there, but not in the fgfs
 executable. This lead me to the conclusion, that the linker optimizes the
 unused variable from the executable.

It's not optimizing the variable, it's optimizing the entire .o file out of
the linkage, as nothing external is explicitly using any of the symbols in
the .o. This is a major weakness of the registration pattern when statically
linking.


 Is there any magic switch to pass to the g++ linker telling him not to
 optimize unused variables, preferably for a certain set of files or a
 single
 library?

No. Either build gnucap as a shared library or add some dummy references to
symbols in the file(s) that are referenced, perhaps indirectly, by code
outside of the library.

Tim
--
Download Intel#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev___
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel