Резюме: при сборке Python 3.1 на 64-разрядной версии RHEL 5.3 с параметром --enable-shared не удается скомпилировать все расширения. Построение "обычный" работает без проблем.
Обратите внимание, что может показаться, что этот вопрос стирает грань между программированием и системным администрированием. Однако я считаю, что, поскольку он должен иметь дело непосредственно с проблемами ОС и проблемами программирования, я бы разместил его как на StackOverflow, так и на ServerFault. Также в Python 3.1.1 с - -enable-shared : не будет создавать никаких расширений. Спасибо!
Проблема:
При сборке 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 отлично компилируется против него. Но при запуске апача получаю:
Cannot load /etc/httpd/modules/mod_wsgi.so into server: /etc/httpd/modules/mod_wsgi.so: undefined symbol: PyCObject_FromVoidPtr
Проект, для которого это предназначено, является долгосрочным проектом, поэтому я согласен с программным обеспечением альфа-качества, если это необходимо. Вот еще некоторые подробности о проблеме.
Хост:
- Делл PowerEdge
- Интел ксенон
- RHEL 5.3 64 бит
- Ничего особенного"
Сборка:
- Исходный дистрибутив 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
-Wl,-Bsymbolic
для модулей (вместе с-fPIC
для libpython)? [я понятия не имею, что он делает, просто знаю, что это какая-то непонятная магия, иногда используемая в таких случаях] - person andrew cooke   schedule 09.09.2011