Thread: Compiling tsearch2 on AIX

Compiling tsearch2 on AIX

From
Mag Gam
Date:
I am trying to compile PostgreSQL 8.0.3/tsearch2 contrib module on AIX 5.2 ML 3

gcc version 3.3.2
GNU Make 3.80


bash-2.05b# gmake
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels
-fno-strict-aliasing  -I./snowball -I./ispell -I./wordparser -I.
-I../../src/include   -c -o dict_ex.o dict_ex.c
In file included from ../../src/include/c.h:64,                from ../../src/include/postgres.h:48,
fromdict_ex.c:9: 
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:484:
error: conflicting types for `fgetpos64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:310:
error: previous declaration of `fgetpos64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:487:
error: conflicting types for `fseeko64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:430:
error: previous declaration of `fseeko64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:488:
error: conflicting types for `fsetpos64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:312:
error: previous declaration of `fsetpos64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:489:
error: conflicting types for `ftello64'
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:431:
error: previous declaration of `ftello64'
gmake: *** [dict_ex.o] Error 1


Can someone please let me know why this is happening?


Re: Compiling tsearch2 on AIX

From
Tom Lane
Date:
Mag Gam <magawake@gmail.com> writes:
> I am trying to compile PostgreSQL 8.0.3/tsearch2 contrib module on AIX 5.2 ML 3

> /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:484:
> error: conflicting types for `fgetpos64'
> /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:310:
> error: previous declaration of `fgetpos64'

I'm just guessing, but this smells to me like a problem with largefile-
vs-not-largefile support.  We discovered long ago that when pg_config.h
defines _FILE_OFFSET_BITS or _LARGEFILE_SOURCE, it's critical that the
compiler see that *before* it includes stdio.h.  Unfortunately it seems
this hard-won knowledge didn't get propagated into tsearch2 until just
recently :-(.  Try applying the tsearch2 changes linked here:
http://archives.postgresql.org/pgsql-committers/2005-05/msg00068.php
and let us know if that helps.  I have not back-patched these changes
into existing release branches, but if it turns out to address a real
problem-seen-in-the-field then that should get done ...
        regards, tom lane


Re: Compiling tsearch2 on AIX

From
Mag Gam
Date:
Thanks for the reply Tom!

I managed to get the cvs version and I made more progress compiling tsearch2

Here is where it errors out.



touch libtsearch2.a
../../src/backend/port/aix/mkldexport.sh libtsearch2.a > libtsearch2.exp
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels
-fno-strict-aliasing  -Wl,-bnoentry -Wl,-H512 -Wl,-bM:SRE -o
libtsearch2.so libtsearch2.a -L../../src/port   -L../../src/port -lm
-Wl,-bI:../../src/backend/postgres.imp -Wl,-bE:libtsearch2.exp
ld: 0711-317 ERROR: Undefined symbol: .get_share_path
ld: 0711-317 ERROR: Undefined symbol: .pg_strncasecmp
ld: 0711-317 ERROR: Undefined symbol: .pg_strcasecmp
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: ld returned 8 exit status
gmake: *** [libtsearch2.so] Error 1

Any ideas?

TIA


On 5/17/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Mag Gam <magawake@gmail.com> writes:
> > I am trying to compile PostgreSQL 8.0.3/tsearch2 contrib module on AIX 5.2 ML 3
>
> > /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:484:
> > error: conflicting types for `fgetpos64'
> > /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:310:
> > error: previous declaration of `fgetpos64'
>
> I'm just guessing, but this smells to me like a problem with largefile-
> vs-not-largefile support.  We discovered long ago that when pg_config.h
> defines _FILE_OFFSET_BITS or _LARGEFILE_SOURCE, it's critical that the
> compiler see that *before* it includes stdio.h.  Unfortunately it seems
> this hard-won knowledge didn't get propagated into tsearch2 until just
> recently :-(.  Try applying the tsearch2 changes linked here:
> http://archives.postgresql.org/pgsql-committers/2005-05/msg00068.php
> and let us know if that helps.  I have not back-patched these changes
> into existing release branches, but if it turns out to address a real
> problem-seen-in-the-field then that should get done ...
>
>                         regards, tom lane
>


Re: Compiling tsearch2 on AIX

From
Mag Gam
Date:
Tom:

Got it working!

I had to modify this line in the tsearch2 Makefile
from
SHLIB_LINK := -lm
to
SHLIB_LINK := -lm -lpgport

it works like a charm!


thanks for your help!


On 5/18/05, Mag Gam <magawake@gmail.com> wrote:
> Thanks for the reply Tom!
>
> I managed to get the cvs version and I made more progress compiling tsearch2
>
> Here is where it errors out.
>
>
>
> touch libtsearch2.a
> ../../src/backend/port/aix/mkldexport.sh libtsearch2.a > libtsearch2.exp
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels
> -fno-strict-aliasing  -Wl,-bnoentry -Wl,-H512 -Wl,-bM:SRE -o
> libtsearch2.so libtsearch2.a -L../../src/port   -L../../src/port -lm
> -Wl,-bI:../../src/backend/postgres.imp -Wl,-bE:libtsearch2.exp
> ld: 0711-317 ERROR: Undefined symbol: .get_share_path
> ld: 0711-317 ERROR: Undefined symbol: .pg_strncasecmp
> ld: 0711-317 ERROR: Undefined symbol: .pg_strcasecmp
> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
> collect2: ld returned 8 exit status
> gmake: *** [libtsearch2.so] Error 1
>
> Any ideas?
>
> TIA
>
>
> On 5/17/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Mag Gam <magawake@gmail.com> writes:
> > > I am trying to compile PostgreSQL 8.0.3/tsearch2 contrib module on AIX 5.2 ML 3
> >
> > > /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:484:
> > > error: conflicting types for `fgetpos64'
> > > /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/stdio.h:310:
> > > error: previous declaration of `fgetpos64'
> >
> > I'm just guessing, but this smells to me like a problem with largefile-
> > vs-not-largefile support.  We discovered long ago that when pg_config.h
> > defines _FILE_OFFSET_BITS or _LARGEFILE_SOURCE, it's critical that the
> > compiler see that *before* it includes stdio.h.  Unfortunately it seems
> > this hard-won knowledge didn't get propagated into tsearch2 until just
> > recently :-(.  Try applying the tsearch2 changes linked here:
> > http://archives.postgresql.org/pgsql-committers/2005-05/msg00068.php
> > and let us know if that helps.  I have not back-patched these changes
> > into existing release branches, but if it turns out to address a real
> > problem-seen-in-the-field then that should get done ...
> >
> >                         regards, tom lane
> >
>


Re: Compiling tsearch2 on AIX

From
Tom Lane
Date:
Mag Gam <magawake@gmail.com> writes:
> I had to modify this line in the tsearch2 Makefile
> from 
> SHLIB_LINK := -lm 
> to
> SHLIB_LINK := -lm -lpgport

Hmm, that's annoying.  I was about to commit this change but it actively
fails on my machine:

/usr/ccs/bin/ld: DP relative code in file ../../src/port/libpgport.a(exec.o) - shared library must be position
independent. Use +z or +Z to recompile.
 
make: *** [libtsearch2.sl.0] Error 1

So we need to think harder.  I wonder why the libpgport symbols aren't
getting picked up from the backend itself on your machine?
        regards, tom lane