RE: multiple inclusion of header files across

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxx]
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@xxxxxxxxxx [mailto:lrtaylor@xxxxxxxxxx]
Sent: Monday, September 15, 2003 5:16 PM
To: aaron.case@xxxxxxxxxxxx; gcc-help@xxxxxxxxxxx
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@xxxxxxxxxxxx]
Sent: Monday, September 15, 2003 1:12 PM
To: gcc-help@xxxxxxxxxxx
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


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux