public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: lrtaylor@micron.com
To: <aaron.case@dynazign.com>
Cc: <gcc-help@gcc.gnu.org>
Subject: RE: multiple inclusion of header files across
Date: Mon, 15 Sep 2003 21:41:00 -0000	[thread overview]
Message-ID: <363801FFD7B74240A329CEC3F7FE4CC40D335E@ntxboimbx07.micron.com> (raw)

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

                 reply	other threads:[~2003-09-15 21:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=363801FFD7B74240A329CEC3F7FE4CC40D335E@ntxboimbx07.micron.com \
    --to=lrtaylor@micron.com \
    --cc=aaron.case@dynazign.com \
    --cc=gcc-help@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).