Problem building python 2.7 with --enable-shared

Discussion in 'Python' started by Marten Lehmann, Sep 16, 2010.

  1. Hello,

    I've build python 2.7 successfully by just calling configure, make and
    make install. But to use python within PostgreSQL, I need to built
    python with --enable-shared.

    I tried to do so (configure --enable-shared), but I see these lines
    several times in the log (but compiling continues):

    /usr/bin/ld: /test/python/lib/libpython2.7.a(abstract.o): relocation
    R_X86_64_32 against `a local symbol' can not be used when making a
    shared object; recompile with -fPIC
    /test/python/lib/libpython2.7.a: could not read symbols: Bad value
    collect2: ld returned 1 exit status

    Later, the compiling process ends completely:

    PYTHONPATH=/var/tmp/vrmd-python2-root/test/python/lib/python2.7
    LD_LIBRARY_PATH=/usr/src/redhat/BUILD/Python-2.7: \
    ./python -Wi -tt
    /var/tmp/vrmd-python2-root/test/python/lib/python2.7/compileall.py \
    -d /test/python/lib/python2.7 -f \
    -x
    'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
    /var/tmp/vrmd-python2-root/test/python/lib/python2.7
    Traceback (most recent call last):
    File
    "/var/tmp/vrmd-python2-root/test/python/lib/python2.7/compileall.py",
    line 17, in <module>
    import struct
    File
    "/var/tmp/vrmd-python2-root/test/python/lib/python2.7/struct.py", line
    1, in <module>
    from _struct import *
    ImportError: No module named _struct
    make: *** [libinstall] Error 1

    Any ideas, what I have done wrong?

    Kind regards
    Marten
     
    Marten Lehmann, Sep 16, 2010
    #1
    1. Advertising

  2. The strange thing is: This only happens when I'm compiling through
    rpmbuild. Issuing the same commands (configure --enable-shared, make,
    make install) directly on the shell works fine...
     
    Marten Lehmann, Sep 16, 2010
    #2
    1. Advertising

  3. On Thursday 16 September 2010, it occurred to Marten Lehmann to exclaim:
    > Hello,
    >
    > I've build python 2.7 successfully by just calling configure, make and
    > make install. But to use python within PostgreSQL, I need to built
    > python with --enable-shared.
    >
    > I tried to do so (configure --enable-shared), but I see these lines
    > several times in the log (but compiling continues):


    Did you start with a clean source tree? If you just reconfigured and called
    make again in the source tree where you already had built Python, make will
    just re-use the old object files, which would be built without -fPIC and
    whatever other options are required for the shared library linking to work.

    >
    > /usr/bin/ld: /test/python/lib/libpython2.7.a(abstract.o): relocation
    > R_X86_64_32 against `a local symbol' can not be used when making a
    > shared object; recompile with -fPIC
    > /test/python/lib/libpython2.7.a: could not read symbols: Bad value
    > collect2: ld returned 1 exit status


    If you get this when building from a fresh source tree, I can't explain why
    this might happen, but, again, starting afresh, this time adding -fPIC to the
    CFLAGS, may work. But I expect that the configure script, or makefile, or
    libtool, or whatever, should do this, hence my guess that maybe you're using
    leftover object files.

    (hint: make clean)

    >
    > Later, the compiling process ends completely:
    >
    > PYTHONPATH=/var/tmp/vrmd-python2-root/test/python/lib/python2.7
    > LD_LIBRARY_PATH=/usr/src/redhat/BUILD/Python-2.7: \
    > ./python -Wi -tt
    > /var/tmp/vrmd-python2-root/test/python/lib/python2.7/compileall.py \
    > -d /test/python/lib/python2.7 -f \
    > -x
    > 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
    > /var/tmp/vrmd-python2-root/test/python/lib/python2.7
    > Traceback (most recent call last):
    > File
    > "/var/tmp/vrmd-python2-root/test/python/lib/python2.7/compileall.py",
    > line 17, in <module>
    > import struct
    > File
    > "/var/tmp/vrmd-python2-root/test/python/lib/python2.7/struct.py", line
    > 1, in <module>
    > from _struct import *
    > ImportError: No module named _struct
    > make: *** [libinstall] Error 1
    >
    > Any ideas, what I have done wrong?
    >
    > Kind regards
    > Marten
     
    Thomas Jollans, Sep 16, 2010
    #3
  4. I digged into this one step further:

    I compared the output of configure and make. For configure, there is no
    change. But for make, I found out something, that I didn't expected:

    When configure is called with a prefix to a location, where a valid
    python installation already exists, it uses these locations for gcc,
    although it shouldn't (we are about to compile a clean, brandnew python
    version, so why should it include parts of an existing python
    installation?).

    Additionally to the default include paths

    gcc [...] -I. -IInclude -I./Include -I/usr/local/include
    -I/usr/src/redhat/BUILD/Python-2.7/Include
    -I/usr/src/redhat/BUILD/Python-2.7 [...]

    the path of the existing Python installation is added:
    -I/test/python2/include

    And additionally the default library paths and libs

    gcc [...] -L/usr/local/lib -L. -lpython2.7 [...]

    the path of the existing Python libs is added:

    gcc [...9 -L/vrmd/python2/lib

    So linking to python2.7 during make doesn't link to the freshly build
    library, but to the existing in the system. And at least in my case,
    where I'm switching from a python installation without --enabled-shared
    to a new version including --enable-shared, this causes serious problems:

    /usr/bin/ld: /vrmd/python2/lib/libpython2.7.a(abstract.o): relocation
    R_X86_64_32 against `a local symbol' can not be used when making a
    shared object; recompile with -fPIC
    -/vrmd/python2/lib/libpython2.7.a: could not read symbols: Bad value
    -collect2: ld returned 1 exit status

    Is there any option I missed in configure or any variable that I might
    set to correct this? Or should a file a bug to the python developers?
    Deinstalling python before compiling or renaming the python directory is
    not a good solution.

    Kind regards
    Marten
     
    Marten Lehmann, Sep 16, 2010
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Patrick
    Replies:
    1
    Views:
    713
  2. hab
    Replies:
    2
    Views:
    496
    Donn Cave
    Jul 7, 2003
  3. Douglass Turner
    Replies:
    2
    Views:
    2,102
    Manfred Bartz
    Sep 4, 2003
  4. Berthold Hoellmann
    Replies:
    10
    Views:
    535
    Berthold Höllmann
    Jan 3, 2004
  5. Rados³aw Bu³at
    Replies:
    1
    Views:
    101
    Rados³aw Bu³at
    May 31, 2008
Loading...

Share This Page