Я пытаюсь собрать Python3 на машине RHEL 5.7, мне удалось собрать Python 3.2.2 с помощью:
# Install required build dependencies
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
# Fetch and extract source. Please refer to http://www.python.org/download/releases
# to ensure the latest source is used.
wget http://www.python.org/ftp/python/3.2/Python-3.2.tar.bz2
tar -xjf Python-3.2.tar.bz2
cd Python-3.2
# Configure the build with a prefix (install dir) of /opt/python3, compile, and install.
./configure --prefix=/opt/python3
make
Но у меня не получается (?) С Python 3.2.3:
Failed to build these modules:
_posixsubprocess
Это проблема, которая должна меня беспокоить? Как мне его построить? я нашел этот патч, но он не включен в исходники Python 3.2.3, которые я получил с веб-сайта ...
Вот результат работы stderr:
~/tmp/Python-3.2.3 $ make > build.log
ldd: warning: you do not have execution permission for `/usr/local/lib/libreadline.so'
/usr/bin/ld: skipping incompatible /usr/local/lib/libreadline.so when searching for -lreadline
/usr/bin/ld: skipping incompatible /usr/local/lib/libreadline.a when searching for -lreadline
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c: In function '_close_open_fd_range_safe':
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: 'O_CLOEXEC' undeclared (first use in this function)
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: (Each undeclared identifier is reported only once
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: for each function it appears in.)
/usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching for -lz
~/tmp/Python-3.2.3 $ grep posix build.log
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -DPy_BUILD_CORE -c ./Modules/posixmodule.c -o Modules/posixmodule.o
ar rc libpython3.2m.a Modules/_threadmodule.o Modules/signalmodule.o Modules/posixmodule.o Modules/errnomodule.o Modules/pwdmodule.o Modules/_sre.o Modules/_codecsmodule.o Modules/_weakref.o Modules/_functoolsmodule.o Modules/operator.o Modules/_collectionsmodule.o Modules/itertoolsmodule.o Modules/_localemodule.o Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o Modules/zipimport.o Modules/symtablemodule.o Modules/xxsubtype.o
building '_posixsubprocess' extension
gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -IInclude -I/home/oznahum/localroot/include -I. -I./Include -I/usr/local/include -I/home/oznahum/tmp/Python-3.2.3 -c /home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c -o build/temp.linux-x86_64-3.2/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.o
_posixsubprocess
Хорошо ... Я здесь отвечаю, чтобы не оставлять вопрос без ответа. Я повторно загрузил исходники Python-3.2.3 и изучил их. Они действительно не включают этот патч.
Я повторно применил патч и протестировал сборку на CentOS-5.7 и RedHat-5.7. Мне удалось скомпилировать без ошибок.
Итак, я думаю, главное - правильно применить патч. Моя неудачная сборка была в Modules / _posixsubprocess:
199 static void
200 _close_open_fd_range_safe(int start_fd, int end_fd, PyObject* py_fds_to_keep)
201 {
202 int fd_dir_fd;
203 if (start_fd >= end_fd)
204 return;
205 fd_dir_fd = open(FD_DIR, O_RDONLY | O_CLOEXEC, 0);
206 #ifdef O_CLOEXEC
207 fd_dir_fd = open(FD_DIR, O_RDONLY | O_CLOEXEC, 0);
208 #else
209 fd_dir_fd = open(FD_DIR, O_RDONLY, 0);
210 #ifdef FD_CLOEXEC
Строку 205 следовало удалить ...