public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* RE: multiple inclusion of header files across
@ 2003-09-15 21:41 lrtaylor
  0 siblings, 0 replies; only message in thread
From: lrtaylor @ 2003-09-15 21:41 UTC (permalink / raw)
  To: aaron.case; +Cc: gcc-help

Aaron,

Eljay was leading you in the right direction.  It looks like the problem is not due to including the header file in multiple locations so much as it is due to you defining variables in the header files, rather than merely declaring them.  Any variables should be _defined_ in the source modules (the .c or .cpp files), and you should be _declared_ in the header files using "extern" statements to indicate to the compiler not to allocate space for the variables in each object module, since it's defined in another "external" object module that will be linked in later.  If you simply state something like "int x" in a header file, the compiler will allocate space for that variable in any file that includes it, which will give you duplicate symbol errors when the program is linked.  The key is that you only want the space for the symbol to be allocated in a single object module and for any others that use that symbol to simply reference it.

Does that make sense?

Thanks,
Lyle Taylor
IS Applications

-----Original Message-----
From: Aaron Case [mailto:aaron.case@dynazign.com]
Sent: Monday, September 15, 2003 3:34 PM
To: lrtaylor
Subject: RE: multiple inclusion of header files across 

Hi Lyle,

Sorry for the ambiguity. The main goal to get rid of errors I firmly believe
are from multiple inclusions of header files.

I have several c source code files that all use many of the same header
files.  This is not a problem when compiling 1 object/c-source file(using
ifndef, etc).  The problem comes when I try to link multiple objects of
which have been compiled with many of the same header files. I get errors
from the linker as such...

XYZTASK.o(.bss.alarm_sefetxyz_obj+0x0): first defined here
ALARMS.o(.bss.alarm_peerENDR_obj+0x0): multiple definition of
`alarm_peerENDR_obj'
XYZTASK.o(.bss.alarm_peerENDR_obj+0x0): first defined here
ALARMS.o(.bss.alarm_sefetpeer_obj+0x0): multiple definition of
`alarm_sefetpeer_obj'
XYZTASK.o(.bss.alarm_sefetpeer_obj+0x0): first defined here
ALARMS.o(.bss.alarm_sefetprinter0_obj+0x0): multiple definition of
`alarm_sefetprinter0_obj'
XYZTASK.o(.bss.alarm_sefetprinter0_obj+0x0): first defined here
ALARMS.o(.bss.alarm_sefetprinter1_obj+0x0): multiple definition of
`alarm_sefetprinter1_obj'
XYZTASK.o(.bss.alarm_sefetprinter1_obj+0x0): first defined here
ALARMS.o(.bss.alarm_sefetprinter2_obj+0x0): multiple definition of
`alarm_sefetprinter2_obj'
XYZTASK.o(.bss.alarm_sefetprinter2_obj+0x0): first defined here
ALARMS.o(.bss.alarm_sefetprinter3_obj+0x0): multiple definition of
`alarm_sefetprinter3_obj'

This above is output of the linker(ld) when trying to link two objects that
were compiled(gcc) using the same header files. The linker fails when each
object has a copy of the same data from the same header file.

thanks in advance.
Aaron Case


-----Original Message-----
From: lrtaylor@micron.com [mailto:lrtaylor@micron.com]
Sent: Monday, September 15, 2003 5:16 PM
To: aaron.case@dynazign.com; gcc-help@gcc.gnu.org
Subject: RE: multiple inclusion of header files accross


Aaron,

Are you experiencing problems that you believe is due to these multiple
inclusions, or what is your main goal here that is driving you to get the
number of inclusions down?

Thanks,
Lyle Taylor
IS Applications

-----Original Message-----
From: Aaron Case [mailto:aaron.case@dynazign.com]
Sent: Monday, September 15, 2003 1:12 PM
To: gcc-help@gcc.gnu.org
Subject: multiple inclusion of header files accross

Hello,

Is there a ld switch to address the problem of multiple inclusion of header
files accross object files.  I have used #ifndef and #define to prevent
multiple inclusion within an object file successfully.

Or should this be address in the makefile?  The current structure of the
makefile compiles several objects and then links the objects together but,
but some header files are included in almost all the source files used to
make each object.

Or should this be addressed by reorganizing my header files and throwing in
a few extern keywords?

Thanks in advance?

Aaron Case

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-09-15 21:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-15 21:41 multiple inclusion of header files across lrtaylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).