LINUX.ORG.RU
решено ФорумAdmin

Не компилится php 5.0.0

 ,


1

2

Потребовалась старая версия php на дебиан.

Готовых пакетов не нашел, скачал исходники с php.net

./configure --disable-all

make

gcc  -Iext/standard/ -Iphp-5.0.0/ext/standard/ -DPHP_ATOM_INC -Iphp-5.0.0/include -Iphp-5.0.0/main -Iphp-5.0.0 -Iphp-5.0.0/Zend  -Iphp-5.0.0/TSRM  -g -O2  -c php-5.0.0/ext/standard/array.c -o ext/standard/array.o  && echo > ext/standard/array.lo
In file included from php-5.0.0/Zend/zend_API.h:26:0,
                 from php-5.0.0/main/php.h:38,
                 from php-5.0.0/ext/standard/array.c:26:
php-5.0.0/Zend/zend_modules.h:34:30: error: array type has incomplete element type
 extern struct _zend_arg_info first_arg_force_ref[2];
                              ^
php-5.0.0/Zend/zend_modules.h:35:30: error: array type has incomplete element type
 extern struct _zend_arg_info second_arg_force_ref[3];
                              ^
php-5.0.0/Zend/zend_modules.h:36:30: error: array type has incomplete element type
 extern struct _zend_arg_info third_arg_force_ref[4];
                              ^
php-5.0.0/Zend/zend_modules.h:37:30: error: array type has incomplete element type
 extern struct _zend_arg_info fourth_arg_force_ref[5];
                              ^
php-5.0.0/Zend/zend_modules.h:38:30: error: array type has incomplete element type
 extern struct _zend_arg_info all_args_by_ref[1];
                              ^
Makefile:332: recipe for target 'ext/standard/array.lo' failed
make: *** [ext/standard/array.lo] Error 1

Долго гуглил, не могу понять как это исправить.

Дебиан Debian 3.16.7 x64



Последнее исправление: amalincom (всего исправлений: 2)

В файле php-5.0.0/Zend/zend_modules.h с 34 строки по 38 поменяй на:

extern struct _zend_arg_info *all_args_by_ref[1];
extern struct _zend_arg_info *first_arg_force_ref[2];
extern struct _zend_arg_info *second_arg_force_ref[3];
extern struct _zend_arg_info *third_arg_force_ref[4];
extern struct _zend_arg_info *fourth_arg_force_ref[5];

Оно там дальше опять вывалится, но патчить дальше мне лень

Difrex ★★★★
()
Последнее исправление: Difrex (всего исправлений: 1)
Ответ на: комментарий от amalincom

Но хочется разобраться с этой проблемой

Возможно, ты собираешь не той версией компилятора или не с теми библиотеками

goingUp ★★★★★
()
Ответ на: комментарий от Difrex

поставил cpp-3.4_3.4.6-9_amd64.deb, gcc-3.4-base_3.4.6-9_amd64.deb, gcc-3.4_3.4.6-9_amd64.deb

в системе появился /usr/bin/gcc-3.4 направил симлинк /usr/bin/gcc на него

попробовал скомпилить тестовый файл на Си:

gcc-3.4 t.c 
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status

Чего ему не хватает?

#ldd /usr/bin/gcc-3.4 

	linux-vdso.so.1 (0x00007ffe625ec000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fae05c6f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fae06013000)
amalincom
() автор топика
Ответ на: комментарий от amalincom

Поставил gcc 4.4

$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.7-2' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.7 (Debian 4.4.7-2) 

$ gcc   -Iext/standard/  -I/php-5.0.0/ext/standard/  -DPHP_ATOM_INC  -I/php-5.0.0/include  -I/php-5.0.0/main  -I/php-5.0.0  -I/php-5.0.0/Zend   -I/php-5.0.0/TSRM   -g -O2   -c /php-5.0.0/ext/standard/array.c  -o ext/standard/array.o 
In file included from /php-5.0.0/Zend/zend_API.h:26,
                 from /php-5.0.0/main/php.h:38,
                 from /php-5.0.0/ext/standard/array.c:26:
/php-5.0.0/Zend/zend_modules.h:34: error: array type has incomplete element type
/php-5.0.0/Zend/zend_modules.h:35: error: array type has incomplete element type
/php-5.0.0/Zend/zend_modules.h:36: error: array type has incomplete element type
/php-5.0.0/Zend/zend_modules.h:37: error: array type has incomplete element type
/php-5.0.0/Zend/zend_modules.h:38: error: array type has incomplete element type
amalincom
() автор топика
Ответ на: комментарий от amalincom

Поправил код, изменив на указатели - компиляция прошла намного дальше

Теперь:

php-5.0.0/Zend/zend_arg_defs.c:1: error: conflicting types for 'first_arg_force_ref'
php-5.0.0/Zend/zend_modules.h:34: note: previous declaration of 'first_arg_force_ref' was here
php-5.0.0/Zend/zend_arg_defs.c:6: error: conflicting types for 'second_arg_force_ref'
php-5.0.0/Zend/zend_modules.h:35: note: previous declaration of 'second_arg_force_ref' was here
php-5.0.0/Zend/zend_arg_defs.c:11: error: conflicting types for 'third_arg_force_ref'
php-5.0.0/Zend/zend_modules.h:36: note: previous declaration of 'third_arg_force_ref' was here
php-5.0.0/Zend/zend_arg_defs.c:18: error: conflicting types for 'fourth_arg_force_ref'
php-5.0.0/Zend/zend_modules.h:37: note: previous declaration of 'fourth_arg_force_ref' was here
php-5.0.0/Zend/zend_arg_defs.c:25: error: conflicting types for 'all_args_by_ref'
php-5.0.0/Zend/zend_modules.h:38: note: previous declaration of 'all_args_by_ref' was here
Makefile:582: recipe for target 'Zend/zend_builtin_functions.lo' failed

А это первый файл:

  1 ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0)
  2     ZEND_ARG_PASS_INFO(1)
  3 ZEND_END_ARG_INFO();

Как бы его исправить?

amalincom
() автор топика

Вонни, как тебе уже верно заметили выше - возми 5.2 и не компостируй себе/людям мозг. AFAIR он есть даже в пакетах.

Охренеть, уже 7.0 релизнулся, а кто-то трахаеться с софтиной 12-летней давности.

3.16

cat /etc/debian_version. А 3.16 это версия едра (чисто на будущее).

svr4
()
Ответ на: комментарий от Difrex

В общем, я своего добился. php 5.0.0 собрался с gcc 3.4, который ставится тремя пакетами с packages.debian.org (в apt его можно найти, но у меня не ставится - не может скачать)

cpp-3.4_3.4.6-9_amd64.deb

gcc-3.4_3.4.6-9_amd64.deb

gcc-3.4-base_3.4.6-9_amd64.deb

Больше времени убил на гцц, а пхп собрался без проблем.

Ещё нашел http://museum.php.net/ и скачал оттуда сорцы php 1. Они компилятся, но потом segmentation fault, надо руками править Makefile и config, оставлю это развлечение на потом.

amalincom
() автор топика
Ответ на: комментарий от amalincom

По-моему самая ранняя версия пыха, которую реально юзали в продакшене - тройка. До этого сидели на пёрле, у которого уже лет 20 как ничего особо не ломается.

svr4
()
2 апреля 2016 г.
Ответ на: комментарий от amalincom

Ты явно что-то утаиваешь. Я так же озадачился установкой 5.0.1 на Ubuntu 14.04.

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
Я пробовал добавлять что
deb http://old-releases.ubuntu.com/ubuntu hardy-updates universe
, что
deb http://archive.debian.org/debian etch main
И то и другое ставит вышеперечисленные 3 пакета
sudo apt-get install gcc-3.4
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  cpp-3.4 gcc-3.4-base
Suggested packages:
  gcc-3.4-doc
The following NEW packages will be installed:
  cpp-3.4 gcc-3.4 gcc-3.4-base
0 upgraded, 3 newly installed, 0 to remove and 4 not upgraded.
Need to get 3,309 kB of archives.
After this operation, 8,770 kB of additional disk space will be used.
Do you want to continue? [Y/n]
WARNING: The following packages cannot be authenticated!
  gcc-3.4-base cpp-3.4 gcc-3.4
Install these packages without verification? [y/N] y
Get:1 http://archive.debian.org/debian/ etch/main gcc-3.4-base i386 3.4.6-5 [164 kB]
Get:2 http://archive.debian.org/debian/ etch/main cpp-3.4 i386 3.4.6-5 [1,735 kB]
Get:3 http://archive.debian.org/debian/ etch/main gcc-3.4 i386 3.4.6-5 [1,409 kB]
Fetched 3,309 kB in 2s (1,266 kB/s)
Selecting previously unselected package gcc-3.4-base.
(Reading database ... 70104 files and directories currently installed.)
Preparing to unpack .../gcc-3.4-base_3.4.6-5_i386.deb ...
Unpacking gcc-3.4-base (3.4.6-5) ...
Selecting previously unselected package cpp-3.4.
Preparing to unpack .../cpp-3.4_3.4.6-5_i386.deb ...
Unpacking cpp-3.4 (3.4.6-5) ...
Selecting previously unselected package gcc-3.4.
Preparing to unpack .../gcc-3.4_3.4.6-5_i386.deb ...
Unpacking gcc-3.4 (3.4.6-5) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up gcc-3.4-base (3.4.6-5) ...
Setting up cpp-3.4 (3.4.6-5) ...
Setting up gcc-3.4 (3.4.6-5) ...
условно работающие
$ gcc --version
gcc (GCC) 3.4.6 (Debian 3.4.6-5)
Copyright (C) 2006 Free Software Foundation, Inc.
Но при попытке собрать hello world, выдаются те самые ошибки
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
Чего ещё надо ставить?

mlt
()
Ответ на: комментарий от mlt

Пересобрал gcc 3.4.6 с тем же успехом... в моем случае помог

export LIBRARY_PATH=/usr/lib/i386-linux-gnu
, вот только оно потом упало на
ext/dom/documenttype.c:219: error: dereferencing pointer to incomplete type

mlt
()
Ответ на: комментарий от mlt

Для закрытия темы...

это лечится

curl https://raw.githubusercontent.com/hnw/phpall/master/patches/patch-to-php-5.1.6-with-libxml2-2.9.txt | patch -p1

mlt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.