In file included from psqlscan.c:2385:I read on the PostgreSQL.fr's forum that this error is linked to large files in 64 bits system, allowing to read / write files of 2 GB and over.
/usr/include/unistd.h:171: error: conflicting types for 'lseek64'
/usr/include/unistd.h:169: error: previous declaration of 'lseek64' was here
In file included from /usr/include/unistd.h:744,
from psqlscan.c:2385:
/usr/include/sys/lockf.h:64: error: conflicting types for 'lockf64'
/usr/include/sys/lockf.h:62: error: previous declaration of 'lockf64' was here
In file included from psqlscan.c:2385:
/usr/include/unistd.h:807: error: conflicting types for 'ftruncate64'
/usr/include/unistd.h:805: error: previous declaration of 'ftruncate64' was here
/usr/include/unistd.h:843: error: conflicting types for 'truncate64'
/usr/include/unistd.h:841: error: previous declaration of 'truncate64' was here
/usr/include/unistd.h:860: error: conflicting types for 'pread64'
/usr/include/unistd.h:857: error: previous declaration of 'pread64' was here
/usr/include/unistd.h:861: error: conflicting types for 'pwrite64'
/usr/include/unistd.h:858: error: previous declaration of 'pwrite64' was here
/usr/include/unistd.h:928: error: conflicting types for 'fclear64'
/usr/include/unistd.h:925: error: previous declaration of 'fclear64' was here
/usr/include/unistd.h:929: error: conflicting types for 'fsync_range64'
/usr/include/unistd.h:926: error: previous declaration of 'fsync_range64' was here
gmake[3]: *** [psqlscan.o] Error 1
gmake[3]: Leaving directory `/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src/bin/psql'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src/bin'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src'
gmake: *** [all] Error 2
Is this a 32-bit or a 64-bit build?
How exactly did you call configure and make?
After configuring, what do you get when you run
grep -i large config.log
in the PostgreSQL directory?
And what is the result of
grep -i large include/pg_config.h
Yours,
Laurenz Albe
--
Sent via pgsql-general mailing list (pgsql-...@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
It was a 32-bit build as I didn't have set the "OBJECT_MODE" to 64.
I call configure and make using as root user:
# ./configure
# gmake
The releases of "make" and "gcc" are :
make-3.80-1
gcc-4.2.0-3
Please find below the result of that you ask me:
1. # grep -i large config.log
configure:18474: checking for _LARGEFILE_SOURCE value needed for
large files
configure:23755: checking for special C compiler options needed for
large files
configure:23860: checking for _FILE_OFFSET_BITS value needed for
large files
conftest.c:144: error: size of array 'off_t_is_large' is negative
| We can't simply define LARGE_OFF_T to be 9223372036854775807,
| #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
| int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
| && LARGE_OFF_T % 2147483647 == 1)
conftest.c:145: error: size of array 'off_t_is_large' is negative
| We can't simply define LARGE_OFF_T to be 9223372036854775807,
| #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
| int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
| && LARGE_OFF_T % 2147483647 == 1)
configure:23985: checking for _LARGE_FILES value needed for large files
conftest.c:144: error: size of array 'off_t_is_large' is negative
| We can't simply define LARGE_OFF_T to be 9223372036854775807,
| #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
| int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
| && LARGE_OFF_T % 2147483647 == 1)
ac_cv_sys_large_files=1
ac_cv_sys_largefile_CC=no
ac_cv_sys_largefile_source=no
#define _LARGE_FILES 1
2. # grep -i large include/pg_config.h
grep: 0652-033 Cannot open include/pg_config.h.
#
# grep -i large src/include/pg_config.h
/* #undef _LARGEFILE_SOURCE */
/* Define for large files, on AIX-style hosts. */
#define _LARGE_FILES 1
Since my post, I have followed the advice of PostgreSQL 8.4
documentation on AIX to do a 64-bit build:
http://www.postgresql.org/docs/8.4/static/installation-platform-notes.html#INSTALLATION-NOTES-AIX
that is to say I have :
- set OBJECT_MODE to 64
- pass CC="gcc -maix64" and LDFLAGS="-Wl,-bbigtoc" to configure
- execute gmake
gmake failed with these errors :
gcc -maix64 -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-fwrapv -I../../src/port -DFRONTEND -I../../src/include -c -o
sprompt.o sprompt.c
gcc -maix64 -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-fwrapv -I../../src/port -DFRONTEND -I../../src/include -c thread.c
ar crs libpgport.a strlcat.o strlcpy.o getopt_long.o chklocale.o
copydir.o dirmod.o exec.o noblock.o path.o pipe.o pgsleep.o
pgstrcasecmp.o qsort.o qsort_arg.o sprompt.o thread.o
ar: 0707-126 strlcat.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 strlcpy.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 getopt_long.o is not valid with the current object file
mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 chklocale.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 copydir.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 dirmod.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 exec.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 noblock.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 path.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 pipe.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 pgsleep.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 pgstrcasecmp.o is not valid with the current object
file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 qsort.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 qsort_arg.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 sprompt.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
ar: 0707-126 thread.o is not valid with the current object file mode.
Use the -X option to specify the desired object mode.
gmake[2]: *** [libpgport.a] Error 16
gmake[2]: Leaving directory
`/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src/port'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory
`/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src'
gmake: *** [all] Error 2
Do you have an idea about these errors ?
Thank you.
Regards,
Alexandra
Albe Laurenz a �crit :
Hmmm, I dont get the error if I set OBJECT_MODE to 32 and
do what you did, but I have PostgreSQL 8.4 here.
config.log and pg_config.h look like yours...
> Since my post, I have followed the advice of PostgreSQL 8.4
> documentation on AIX to do a 64-bit build:
> http://www.postgresql.org/docs/8.4/static/installation-platform-notes.html#INSTALLATION-NOTES-AIX
> that is to say I have :
> - set OBJECT_MODE to 64
> - pass CC="gcc -maix64" and LDFLAGS="-Wl,-bbigtoc" to configure
> - execute gmake
>
> gmake failed with these errors :
>
[...]
> ar crs libpgport.a strlcat.o strlcpy.o getopt_long.o chklocale.o
> copydir.o dirmod.o exec.o noblock.o path.o pipe.o pgsleep.o
> pgstrcasecmp.o qsort.o qsort_arg.o sprompt.o thread.o
> ar: 0707-126 strlcat.o is not valid with the current object file mode.
> Use the -X option to specify the desired object mode.
You have to export OBJECT_MODE. Setting it is not enough.
Did you 'make clean' first? Otherwise some 64-bit objects might still be around...
I have always run "gmake distclean" before relaunching a build.
Maybe the32-bit build failed because I have not set and exported the
"OBJECT_MODE" environment variable.
I will try to build PostgreSQL once again with "export OBJECT_MODE=32".
I continued to test a 64-bit build and finally, I found the procedure to
do a 64-bit build of PostgreSQL 8.3.8 on AIX 5.3.
As "root" user :
# export OBJECT_MODE=64
# export CFLAGS="-maix64"
# export LDFLAGS="-maix64 -Wl,-bbigtoc"
# export AR="ar -X64" => this step was missing in my first test
# ./configure
# gmake
All of PostgreSQL successfully made. Ready to install.
As non-root user :
# gmake check
=======================
All 114 tests passed.
=======================
As "root" user:
# gmake install
PostgreSQL installation complete.
I will try this procedure with "export OBJECT_MODE=32" at the beginning
to see if the first error was coming from this variable.
I will tell me my conclusion.
About 32-build versus 64-build on AIX, could you please tell me if
PostgreSQL will be able to use all the benefits of a 64-build or not ?
Thank you for your answer.
Regards,
Alexandra
Albe Laurenz a �crit :
I have juste finished to build PostgreSQL 8.3.8 with OBJECT_MODE set to
32 and I have exactly the same error as the beginning :
# export OBJECT_MODE=32
# cd /home/PostgreSQL_8.3.8/sources/postgresql-8.3.8
# ./configure => OK
# gmake 2>&1 | tee gmake_PGS_8.3.8_v4.log
In file included from psqlscan.c:2385:
/usr/include/unistd.h:171: error: conflicting types for 'lseek64'
/usr/include/unistd.h:169: error: previous declaration of 'lseek64' was here
In file included from /usr/include/unistd.h:744,
from psqlscan.c:2385:
/usr/include/sys/lockf.h:64: error: conflicting types for 'lockf64'
/usr/include/sys/lockf.h:62: error: previous declaration of 'lockf64'
was here
In file included from psqlscan.c:2385:
/usr/include/unistd.h:807: error: conflicting types for 'ftruncate64'
/usr/include/unistd.h:805: error: previous declaration of 'ftruncate64'
was here
/usr/include/unistd.h:843: error: conflicting types for 'truncate64'
/usr/include/unistd.h:841: error: previous declaration of 'truncate64'
was here
/usr/include/unistd.h:860: error: conflicting types for 'pread64'
/usr/include/unistd.h:857: error: previous declaration of 'pread64' was here
/usr/include/unistd.h:861: error: conflicting types for 'pwrite64'
/usr/include/unistd.h:858: error: previous declaration of 'pwrite64' was
here
/usr/include/unistd.h:928: error: conflicting types for 'fclear64'
/usr/include/unistd.h:925: error: previous declaration of 'fclear64' was
here
/usr/include/unistd.h:929: error: conflicting types for 'fsync_range64'
/usr/include/unistd.h:926: error: previous declaration of
'fsync_range64' was here
gmake[3]: *** [psqlscan.o] Error 1
gmake[3]: Leaving directory
`/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src/bin/psql'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory
`/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src/bin'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory
`/home/PostgreSQL_8.3.8/sources/postgresql-8.3.8/src'
gmake: *** [all] Error 2
Could you please give me the command you execute to 32-build PostgreSQL
on AIX ?
Thank you.
Regards,
Alexandra
Albe Laurenz a �crit :
--
Alexandra ROY
Database Competence Center
Bull, Architect of an Open World TM
Phone: 04 76 29 77 01
http://www.bull.com
This e-mail contains material that is confidential for the sole use of
the intended recipient. Any review, reliance or distribution by others
or forwarding without express permission is strictly prohibited. If you
are not the intended recipient, please contact the sender and delete all
copies.
I will look at the 32 bit case again.
> I continued to test a 64-bit build and finally, I found the
> procedure to
> do a 64-bit build of PostgreSQL 8.3.8 on AIX 5.3.
> As "root" user :
You don't have to be root for this.
> # export OBJECT_MODE=64
> # export CFLAGS="-maix64"
> # export LDFLAGS="-maix64 -Wl,-bbigtoc"
> # export AR="ar -X64" => this step was missing in my first test
This should not be necessary - if you look at the man page of "ar"
you will see that the default value of the -X flag is derived
from OBJECT_MODE.
> # ./configure
> # gmake
> All of PostgreSQL successfully made. Ready to install.
I'm glad that you got it to compile.
> As non-root user :
> # gmake check
> =======================
> All 114 tests passed.
> =======================
>
> As "root" user:
> # gmake install
> PostgreSQL installation complete.
Yours,
# export OBJECT_MODE="64"
# export CFLAGS="-maix64"
# export LDFLAGS="-maix64 -Wl,-bbigtoc"
# ./configureLaurenz, you are right: it is not necessary to specify:
# gmake
# gmake install
# export AR="ar -X64"
# export OBJECT_MODE="32"and use the "-disable-largefile" option with configure :
# ./configure -disable-largefileIf I use the "-disable-largefile" option, "configure" indicates at the end:
configure: WARNING: option ignored: --enable-largefileAnd then, the compilation is successful:
All of PostgreSQL successfully made. Ready to install.
In file included from psqlscan.c:2385:
/usr/include/unistd.h:171: error: conflicting types for 'lseek64'
/usr/include/unistd.h:169: error: previous declaration of 'lseek64'
was here
In file included from /usr/include/unistd.h:744,
from psqlscan.c:2385:
/usr/include/sys/lockf.h:64: error: conflicting types for 'lockf64'
/usr/include/sys/lockf.h:62: error: previous declaration of
'lockf64' was here
Does someone have an idea about this ?
> I dug around a little, and the problem is in psqlscan.c which is generated
> from psqlscan.l by flex.
> The problem is that both _LARGE_FILES and _LARGE_FILE_API are #defined
> in this case, which makes #include <unistd.h> fail.
Yeah. We solved this and other problems years ago by decreeing that
we would never try to compile flex output files on their own; they'd
always be #include'd into some other source file so that pg_config.h
would get read first. psqlscan.l seems to have escaped that dictum
somehow, but I guess we'd better make it fall into line.
In most of the other cases the #include is done in an associated .y
file, but there is none in psql. Anyone have a thought which of
psql's .c files would be the most appropriate host?
regards, tom lane
> mainloop.c?
Yeah, that's about the same conclusion I had come to --- that's
the principal caller so it's the closest analog to what we do
elsewhere.
Will fix.
The problem will be fixed in the upcoming 8.5 release.
If you need a 32-bit build of 8.3.8 on AIX, you can (after
you got the error message) edit src/bin/psql/psqlscan.c and add
#include "postgres.h"
as first line.
Then try again, and it should work.
Actually it's in the 8.3 CVS branch too. A 8.3 snapshot should work
fine.
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
> The problem will be fixed in the upcoming 8.5 release.
... and the next minor releases, eg 8.3.9.
regards, tom lane
Adding #include "postgres.h" in src/bin/psql/psqlscan.c fixes the problem !
I tested the fix with PostgreSQL 8.3.8 and I would check the 8.3.9 as
soon as possible.
Thank you so much for your help and your rapidity to solve this question
/ problem !!!
Have a nice day.
Regards,
Alexandra
Tom Lane a �crit :
> "Albe Laurenz" <lauren...@wien.gv.at> writes:
>
>> Alexandra Roy wrote:
>>
>>> Why the "-disable-largefile" option is necessary to do a
>>> PostgreSQL 8.3.8 32-build ?
>>>
>
>
>> The problem will be fixed in the upcoming 8.5 release.
>>
>
> ... and the next minor releases, eg 8.3.9.
>
> regards, tom lane
>
>
>
--
Alexandra ROY
Database Competence Center
Bull, Architect of an Open World TM
Phone: 04 76 29 77 01
http://www.bull.com
This e-mail contains material that is confidential for the sole use of
the intended recipient. Any review, reliance or distribution by others
or forwarding without express permission is strictly prohibited. If you
are not the intended recipient, please contact the sender and delete all
copies.