Python 3.1.1 с --enable-shared: не собирает никаких расширений - PullRequest
6 голосов
/ 10 октября 2009

Резюме: При сборке Python 3.1 на 64-битной RHEL 5.3 с --enable-shared не удается скомпилировать все расширения. Сборка "нормальная" работает нормально, без проблем.

Обратите внимание , что этот вопрос может показаться стирающим грань между программированием и системным администрированием. Тем не менее, я считаю, что, поскольку он имеет непосредственное отношение к получению языковой поддержки и очень сильно связан с поддержкой процесса программирования, я бы поставил кросс-пост здесь. Также по адресу: https://serverfault.com/questions/73196/python-3-1-1-with-enable-shared-will-not-build-any-extensions. Спасибо!

Проблема:

Сборка Python 3.1 на 64-битной RHEL 5.3 с --enable-shared не компилирует все расширения. Сборка "нормальная" работает нормально, без проблем.

Я могу прекрасно собрать python 3.1, но при сборке в виде разделяемой библиотеки он выдает много предупреждений (см. Ниже) и отказывается создавать какие-либо модули на основе c. Несмотря на эту ошибку, я все еще могу собрать mod_wsgi 3.0c5 и запустить его под Apache. Излишне говорить, что функциональность Python значительно снижена ...

Интересно отметить, что Python 3.2a0 (из svn) прекрасно компилируется с --enable-shared, а mod_wsgi прекрасно компилируется с ним. Но при запуске apache я получаю:

Cannot load /etc/httpd/modules/mod_wsgi.so into server: /etc/httpd/modules/mod_wsgi.so: undefined symbol: PyCObject_FromVoidPtr

Проект, для которого он предназначен, является долгосрочным проектом, поэтому я согласен с программным обеспечением альфа-качества, если это необходимо. Вот еще несколько подробностей о проблеме.

Ведущий:

  • Dell PowerEdge
  • Intel Xenon
  • RHEL 5.3 64bit
  • Ничего особенного

Сложение:

  • Исходный код Python 3.1.1
  • Работает нормально с ./configure
  • Не работает нормально с ./configure --enable-shared

(export CFLAGS="-fPIC" сделано)

сделать вывод

<ч />

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -fPIC -DPy_BUILD_CORE -c ./Modules/_weakref.c -o Modules/_weakref.o

<ч />

building 'bz2' extension gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -I./Include -I/usr/local/include -IInclude -I/home/build/RPMBUILD/BUILD/Python-3.1.1 -c /home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.c -o build/temp.linux-x86_64-3.1/home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.o gcc -pthread -shared -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes build/temp.linux-x86_64-3.1/home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.o -L/usr/local/lib -L. -lbz2 -lpython3.1 -o build/lib.linux-x86_64-3.1/bz2.so /usr/bin/ld: /usr/local/lib/libpython3.1.a(abstract.o): relocation R_X86_64_32 against 'a local symbol' can not be used when making a shared object; recompile with -fPIC

<ч />
Failed to build these modules:
_bisect            _codecs_cn         _codecs_hk
_codecs_iso2022    _codecs_jp         _codecs_kr
_codecs_tw         _collections       _csv
_ctypes            _ctypes_test       _curses
_curses_panel      _dbm               _elementtree
_gdbm              _hashlib           _heapq
_json              _lsprof            _multibytecodec
_multiprocessing   _pickle            _random
_socket            _sqlite3           _ssl
_struct            _testcapi          array
atexit             audioop            binascii
bz2                cmath              crypt
datetime           fcntl              grp
itertools          math               mmap
nis                operator           ossaudiodev
parser             pyexpat            readline
resource           select             spwd
syslog             termios            time
unicodedata        zlib

Ответы [ 2 ]

5 голосов
/ 10 октября 2009

Что-то не так с вашей средой сборки. Он берет libpython3.1.a из /usr/local/lib; это путает сообщения об ошибках. Он пытается соединиться с этой библиотекой, что не удается - однако, он не должен был пытаться сделать это в первую очередь, поскольку он должен был использовать только что построенный libpython. Я рекомендую исключить установку Python 3.1 в /usr/local.

Вы не показываете в своих выходных данных, был ли libpython3.1.so.1.0 создан в дереве сборки; было бы важно выяснить, существует ли он, как он был связан и какие символы он экспортировал.

0 голосов
/ 11 октября 2009

/ usr / local / lib был добавлен в путь включения библиотеки во время компиляции:

-L / usr / local / lib -L.

Обычно во время компиляции нужно искать по нескольким «общим» путям для библиотек (/ usr / lib, / usr / local / lib, ./ и т. Д.), Но, возможно, он берет файл / usr / local / lib переменная окружения LD_LIBRARY_PATH и привязка к команде сборки.

...