Thread: Duplicate Symbols - Compiler Warnings

Duplicate Symbols - Compiler Warnings

From
Terry Lee Tucker
Date:
Greetings:

We are converting from 7.4.19 to 8.3. While compiling our application using
version 8.3, I have noticed the following warning from the compiler when
compiling perlAPI.c:

gcc -ggdb -Wall -Wmissing-prototypes -Wmissing-declarations -fforce-addr
-DUNIX-DSTDERR_MSG  -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING
-fno-strict-aliasing -pipe-I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm
-I/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE  -I/usr/X11R6/include
-I/usr/local/pg83/include -I/usr/local/pg83/include/server
-I/esc/logpro/4.0/pgrnd/prog -c utility/perlAPI.c
In file included
from /usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/perl.h:37,
                 from /esc/logpro/4.0/pgrnd/prog/utility/perlAPI.h:10,
                 from utility/perlAPI.c:11:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/config.h:2183:1: warning:
"_"redefined
In file included from /usr/local/pg83/include/postgresql/server/postgres.h:48,
                 from /esc/logpro/4.0/pgrnd/prog/logpro.h:35,
                 from /esc/logpro/4.0/pgrnd/prog/utility/perlAPI.h:8,
                 from utility/perlAPI.c:11:
/usr/local/pg83/include/postgresql/server/c.h:94:1: warning: this is the
location of the previous definition

In config.h, the symbol in question on line 2183 is:
#define _(args) args

In c.h (postgres) the offending symbol on line 94 is:
#define _(x) gettext((x))

I expect this to cause random core dumps when putting the application into
production and it concerns me greatly. So, my question is, do you see this as
a serious problem and, if so, what shall I do to resolve it? By the way, this
problem does not exist when compiling with 7.4.19.

TIA
--
Terry Lee Tucker
Turbo's IT Manager
Turbo, division of Ozburn-Hessey Logistics
2251 Jesse Jewell Pkwy NE
Gainesville, GA 30501
Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 404-6987
terry@turbocorp.com
www.turbocorp.com

Re: Duplicate Symbols - Compiler Warnings

From
Terry Lee Tucker
Date:
Didn't get any nibbles on this one. Can anybody provide any insight on this?

Thanks...

On Thursday 17 April 2008 10:03, Terry Lee Tucker wrote:
> Greetings:
>
> We are converting from 7.4.19 to 8.3. While compiling our application using
> version 8.3, I have noticed the following warning from the compiler when
> compiling perlAPI.c:
>
> gcc -ggdb -Wall -Wmissing-prototypes -Wmissing-declarations -fforce-addr
> -DUNIX-DSTDERR_MSG  -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING
> -fno-strict-aliasing -pipe-I/usr/local/include -D_LARGEFILE_SOURCE
> -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm
> -I/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE  -I/usr/X11R6/include
> -I/usr/local/pg83/include -I/usr/local/pg83/include/server
> -I/esc/logpro/4.0/pgrnd/prog -c utility/perlAPI.c
> In file included
> from /usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/perl.h:37,
>                  from /esc/logpro/4.0/pgrnd/prog/utility/perlAPI.h:10,
>                  from utility/perlAPI.c:11:
> /usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/config.h:2183:1: warning:
> "_"redefined
> In file included from
> /usr/local/pg83/include/postgresql/server/postgres.h:48, from
> /esc/logpro/4.0/pgrnd/prog/logpro.h:35,
>                  from /esc/logpro/4.0/pgrnd/prog/utility/perlAPI.h:8,
>                  from utility/perlAPI.c:11:
> /usr/local/pg83/include/postgresql/server/c.h:94:1: warning: this is the
> location of the previous definition
>
> In config.h, the symbol in question on line 2183 is:
> #define _(args) args
>
> In c.h (postgres) the offending symbol on line 94 is:
> #define _(x) gettext((x))
>
> I expect this to cause random core dumps when putting the application into
> production and it concerns me greatly. So, my question is, do you see this
> as a serious problem and, if so, what shall I do to resolve it? By the way,
> this problem does not exist when compiling with 7.4.19.
>
> TIA
> --
> Terry Lee Tucker
> Turbo's IT Manager
> Turbo, division of Ozburn-Hessey Logistics
> 2251 Jesse Jewell Pkwy NE
> Gainesville, GA 30501
> Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 404-6987
> terry@turbocorp.com
> www.turbocorp.com

--
Terry Lee Tucker
Turbo's IT Manager
Turbo, division of Ozburn-Hessey Logistics
2251 Jesse Jewell Pkwy NE
Gainesville, GA 30501
Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 404-6987
terry@turbocorp.com
www.turbocorp.com

Re: Duplicate Symbols - Compiler Warnings

From
Tom Lane
Date:
Terry Lee Tucker <terry@chosen-ones.org> writes:
> Didn't get any nibbles on this one. Can anybody provide any insight on this?

You're complaining in the wrong place ... I dunno what perlAPI.c is, but
it's not part of Postgres.

FWIW, plperl.c seems to work around the issue this way:

#include "postgres.h"
/* Defined by Perl */
#undef _

// include Perl headers here

I'm not sure that's entirely the right solution, because Perl's _ macro
is 100% useless in any project that considers ANSI C a prerequisite,
whereas ours could be useful ... but right now plperl doesn't have any
localization so it doesn't need the _ macro anyway.

            regards, tom lane

Re: Duplicate Symbols - Compiler Warnings

From
Terry Lee Tucker
Date:
On Thursday 17 April 2008 19:32, Tom Lane wrote:
> Terry Lee Tucker <terry@chosen-ones.org> writes:
> > Didn't get any nibbles on this one. Can anybody provide any insight on
> > this?
>
> You're complaining in the wrong place ... I dunno what perlAPI.c is, but
> it's not part of Postgres.
>
> FWIW, plperl.c seems to work around the issue this way:
>
> #include "postgres.h"
> /* Defined by Perl */
> #undef _
>
> // include Perl headers here
>
> I'm not sure that's entirely the right solution, because Perl's _ macro
> is 100% useless in any project that considers ANSI C a prerequisite,
> whereas ours could be useful ... but right now plperl doesn't have any
> localization so it doesn't need the _ macro anyway.
>
>    regards, tom lane

Tom,

Thanks for the reply. I've implemented your suggestion and the warning goes
away. perlAPI.c is our own source file of functions which allows access to
the Perl interpreter which is linked in with the application. We use this to
access various Perl hashes that configure and control the system. We'll do
some serious testing to see if I've broken anything.

As usual, thanks for your invaluable assistance...

--
Terry Lee Tucker
Turbo's IT Manager
Turbo, division of Ozburn-Hessey Logistics
2251 Jesse Jewell Pkwy NE
Gainesville, GA 30501
Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 404-6987
terry@turbocorp.com
www.turbocorp.com