FAQ
Dear all,

I cannot compile PL/Perl and PL/Python under x86_64. I'm running
Intel Pentium D 3.2GHz Dual-core, Debian GNU/Linux AMD64 port, kernel
2.6.16.14, gcc 3.4.4, glibc 2.3.2, perl 5.8.8, Python 2.4.3.

imacat@yuki ~ % uname -a
Linux yuki 2.6.16.14-allmods #1 SMP Sat May 6 18:25:11 CST 2006 x86_64 GNU/Linux

To complie PL/Perl:

imacat@yuki /tmp/postgresql-8.1.3 % ./configure --prefix=/usr
--sysconfdir=/etc --localstatedir=/var --mandir=/usr/share/man
--enable-nls --with-docdir=/usr/sha re/doc/postgresql --with-perl
--with-pam
checking build system type... x86_64-unknown-linux-gnu
...
config.status: linking ./src/makefiles/Makefile.linux to
src/Makefile.port
imacat@yuki /tmp/postgresql-8.1.3 % make
make -C doc all
...
tsort: -: input contains a loop:
tsort: SPI.o
tsort: plperl.o
ranlib libplperl.a
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after- statement -Wendif-labels -fno-strict-aliasing -fpic
-shared -Wl,-soname,libplper l.so.0 plperl.o spi_internal.o SPI.o
-L/usr/local/lib -L/usr/lib/perl5/5.8.8/x8
6_64-linux-thread-multi-ld/CORE -L../../../src/port
/usr/lib/perl5/5.8.8/x86_64-
linux-thread-multi-ld/auto/DynaLoader/DynaLoader.a -lperl -lnsl -ldl -lm
-lcrypt -lutil -lpthread -lc
-Wl,-rpath,/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi- ld/CORE -o
libplperl.so.0.0
/usr/bin/ld:
/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/auto/DynaLoader/D
ynaLoader.a(DynaLoader.o): relocation R_X86_64_32 can not be used when
making a shared object; recompile with -fPIC
/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/auto/DynaLoader/DynaLoader.a:
could not read symbols: Bad value
collect2: ld returned 1 exit status
make[3]: *** [libplperl.so.0.0] Error 1
make[3]: Leaving directory `/tmp/postgresql-8.1.3/src/pl/plperl'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/tmp/postgresql-8.1.3/src/pl'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/tmp/postgresql-8.1.3/src'
make: *** [all] Error 2
imacat@yuki /tmp/postgresql-8.1.3 %

The same goes for PL/Python:

imacat@yuki /tmp/postgresql-8.1.3 % ./configure --prefix=/usr
--sysconfdir=/etc --localstatedir=/var --mandir=/usr/share/man
--enable-nls --with-docdir=/usr/share/doc/postgresql --with-python
--with-pam
checking build system type... x86_64-unknown-linux-gnu
...
config.status: linking ./src/makefiles/Makefile.linux to
src/Makefile.port
imacat@yuki /tmp/postgresql-8.1.3 % make
make -C doc all
...
make[3]: Entering directory `/tmp/postgresql-8.1.3/src/pl/plpython'
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fpic
-I. -I/usr/include/python2.4 -I../../../src/include -D_GNU_SOURCE -c
-o plpython.o plpython.c
ar crs libplpython.a `lorder plpython.o | tsort`
ranlib libplpython.a
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fpic
-shared -Wl,-soname,libplpython.so.0 plpython.o
-L/usr/lib/python2.4/config -L../../../src/port -lpython2.4 -lpthread
-ldl -lutil -lm -Wl,-rpath,/usr/lib/python2.4/config -o
libplpython.so.0.0
/usr/bin/ld: /usr/lib/python2.4/config/libpython2.4.a(abstract.o):
relocation R_X86_64_32 can not be used when making a shared object;
recompile with -fPIC
/usr/lib/python2.4/config/libpython2.4.a: could not read symbols: Bad
value
collect2: ld returned 1 exit status
make[3]: *** [libplpython.so.0.0] Error 1
make[3]: Leaving directory `/tmp/postgresql-8.1.3/src/pl/plpython'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/tmp/postgresql-8.1.3/src/pl'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/tmp/postgresql-8.1.3/src'
make: *** [all] Error 2
imacat@yuki /tmp/postgresql-8.1.3 %

I have recompiled my perl many times, with:

./Configure -Dusethreads -Dcc=gcc -Duselongdouble -Doptimize="-g -O3"
-Duse64bitint -Duse64bitall -Dprefix=/usr -Dd_dosuid
-Dotherlibdirs=/usr/share/perl5 -Dinc_version_list=none
-Acccdlflags=-fPIC -Duseshrplib=false
-Dcf_email=imacat@mail.imacat.idv.tw

I've changed CFLAGS_SL to -fPIC in src/makefiles/Makefile.linux, and
it still doesn't help.

...
tsort: plperl.o
ranlib libplperl.a
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fPIC
-shared -Wl,-soname,libplperl.so.0 plperl.o spi_internal.o SPI.o
-L/usr/local/lib
-L/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/CORE
-L../../../src/port /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/au
to/DynaLoader/DynaLoader.a -lperl -lnsl -ldl -lm -lcrypt -lutil
-lpthread -lc
-Wl,-rpath,/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/CORE -o
libplperl.so.0.0
/usr/bin/ld: /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/auto/Dyn
aLoader/DynaLoader.a(DynaLoader.o): relocation R_X86_64_32 can not be
used when making a shared object; recompile with -fPIC
/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi-ld/auto/DynaLoader/DynaLoader.a:
could not read symbols: Bad value
collect2: ld returned 1 exit status
make[3]: *** [libplperl.so.0.0] Error 1
...

...
make[3]: Entering directory `/tmp/postgresql-8.1.3/src/pl/plpython'
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fPIC
-shared -Wl,-soname,libplpython.so.0 plpython.o
-L/usr/lib/python2.4/config -L../../../src/port -lpython2.4 -lpthread
-ldl -lutil -lm -Wl,-rpath,/usr/lib/python2.4/config -o
libplpython.so.0.0
/usr/bin/ld: /usr/lib/python2.4/config/libpython2.4.a(abstract.o):
relocation R_X86_64_32 can not be used when making a shared object;
recompile with -fPIC
/usr/lib/python2.4/config/libpython2.4.a: could not read symbols: Bad
value
collect2: ld returned 1 exit status
make[3]: *** [libplpython.so.0.0] Error 1
...

I'm out of ideas. Is there anyone know which flags to add to or
where my mistake is? Thank you.

--
Best regards,
imacat ^_*' <imacat@mail.imacat.idv.tw>
PGP Key: http://www.imacat.idv.tw/me/pgpkey.txt

<<Woman's Voice>> News: http://www.wov.idv.tw/
Tavern IMACAT's: http://www.imacat.idv.tw/
TLUG List Manager: http://lists.linux.org.tw/cgi-bin/mailman/listinfo/tlug

Search Discussions

  • Tom Lane at May 7, 2006 at 5:10 pm

    imacat writes:
    I cannot compile PL/Perl and PL/Python under x86_64.
    Works fine for me (without any tinkering with flags) on Fedora Core 4.
    Maybe you don't have 64-bit versions of the perl and python libraries?

    regards, tom lane
  • Imacat at May 7, 2006 at 7:59 pm

    On Sun, 07 May 2006 13:09:48 -0400 Tom Lane wrote:
    imacat <imacat@mail.imacat.idv.tw> writes:
    I cannot compile PL/Perl and PL/Python under x86_64.
    Works fine for me (without any tinkering with flags) on Fedora Core 4.
    Maybe you don't have 64-bit versions of the perl and python libraries?
    Will... thank you for the hint. I have tested to build with the
    precompiled binary perl 5.8.4 that comes with the Debian distribution,
    and it works. It now seems that the problem resides on my perl
    compilation. I'll go for that direction.

    --
    Best regards,
    imacat ^_*' <imacat@mail.imacat.idv.tw>
    PGP Key: http://www.imacat.idv.tw/me/pgpkey.txt

    <<Woman's Voice>> News: http://www.wov.idv.tw/
    Tavern IMACAT's: http://www.imacat.idv.tw/
    TLUG List Manager: http://lists.linux.org.tw/cgi-bin/mailman/listinfo/tlug
  • Imacat at May 9, 2006 at 4:34 pm

    On Mon, 08 May 2006 03:58:54 +0800 imacat wrote:
    On Sun, 07 May 2006 13:09:48 -0400
    Tom Lane wrote:
    imacat <imacat@mail.imacat.idv.tw> writes:
    I cannot compile PL/Perl and PL/Python under x86_64.
    Works fine for me (without any tinkering with flags) on Fedora Core 4.
    Will... thank you for the hint. I have tested to build with the
    I have successfully compiled with a shared Perl/Python libraries.
    Thank you for your hint. But now I have another question.

    Why can't I link PL/Perl and PL/Python against the static
    Perl/Python libraries, as I did on 32-bit machines? I have added -fPIC
    when linking Perl statically, but it still doesn't work. Is ther any
    reason that it doesn't work to link that way?

    --
    Best regards,
    imacat ^_*' <imacat@mail.imacat.idv.tw>
    PGP Key: http://www.imacat.idv.tw/me/pgpkey.txt

    <<Woman's Voice>> News: http://www.wov.idv.tw/
    Tavern IMACAT's: http://www.imacat.idv.tw/
    TLUG List Manager: http://lists.linux.org.tw/cgi-bin/mailman/listinfo/tlug
  • Imacat at May 22, 2006 at 3:33 pm

    On Sun, 21 May 2006 16:35:24 -0700 (PDT) gede wawan wrote:
    relocation R_X86_64_32 can not be used when making a shared object;
    recompile with -fPIC
    May I ask how? I have tried to edit src/makefiles/Makefile.linux
    and changed -fpic to -fPIC, but it does not help. Maybe I should set
    the flag elsewhere?

    Actually, I have made some tests. I found that in the PostgreSQL
    document, Perl must be built as shared library:
    14.2. Requirements
    To build the server programming language PL/Perl you need a full Perl
    installation, including the libperl library and the header files. Since
    PL/Perl will be a shared library, the libperl library must be a shared
    library also on most platforms. This appears to be the default in recent
    Perl versions, but it was not in earlier versions, and in any case it is
    the choice of whomever installed Perl at your site.
    But, on my i386 machine, I can build PL/Perl with static library
    (libperl.a). But I can't do that on x86_64 anymore. Can somebody tell
    me why, or where should I referring to?

    The same issue goes to PL/Python. I'm not good at Python, but I
    know that I was building static library before, and it works for
    PL/Python on i386. But it does not work anymore on x86_64, too.

    --
    Best regards,
    imacat ^_*' <imacat@mail.imacat.idv.tw>
    PGP Key: http://www.imacat.idv.tw/me/pgpkey.txt

    <<Woman's Voice>> News: http://www.wov.idv.tw/
    Tavern IMACAT's: http://www.imacat.idv.tw/
    TLUG List Manager: http://lists.linux.org.tw/cgi-bin/mailman/listinfo/tlug
  • Andrew Dunstan at May 22, 2006 at 8:18 pm

    imacat wrote:
    But, on my i386 machine, I can build PL/Perl with static library
    (libperl.a). But I can't do that on x86_64 anymore. Can somebody tell
    me why, or where should I referring to?
    Why do you want to do this? It works perfectly well with a shared lib,
    and is probably more memory efficient and faster to load.

    cheers

    andrew
  • Theo Schlossnagle at May 22, 2006 at 8:47 pm

    Andrew Dunstan wrote:

    imacat wrote:
    But, on my i386 machine, I can build PL/Perl with static library
    (libperl.a). But I can't do that on x86_64 anymore. Can somebody tell
    me why, or where should I referring to?

    Why do you want to do this? It works perfectly well with a shared lib,
    and is probably more memory efficient and faster to load.
    I assume this is for the performance gains that can be seen by loading
    non-PIC code over PIC code. However, this is not an option on x86_64.
    Dynamically loaded code must be compiled with PIC on pretty much every
    platform except 32-bit intel.

    The bigger puzzle is why you could link against non-PIC code in shared
    objects on 32-bit x86. (I know the answer, but it has no real merit).
    If you want things dynamically loadable, they must be PIC.

    --
    // Theo Schlossnagle
    // Principal Engineer -- http://www.omniti.com/~jesus/
    // Ecelerity: Run with it. -- http://www.omniti.com/

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedMay 7, '06 at 4:54p
activeMay 22, '06 at 8:47p
posts7
users5
websitepostgresql.org...
irc#postgresql

People

Translate

site design / logo © 2022 Grokbase