이 절은 빌드 시에 가장 자주 발생하는 에러에 대해서 정리합니다.
configure.in파일이 configure 스크립트를 생성할수 있도록 GNU autoconf 패키지가 설치되어 있어야 합니다. 그리고 나서 CVS 서버에서 소스를 가져오신 후에 최상위 디렉토리에서 ./buildconf명령을 실행하세요. (또한, --enable-maintainer-mode옵션으로 configure를 실행하지 않으면, configure.in파일이 갱신되었을때, configure 스크립트는 자동적으로 재생성 되지 않을겁니다. 그래서 configure.in 파일이 갱신되었다는것을 알고나서 손수 재생성해야 할것입니다. 이것을 알아챌수 있는 방법은 configure 나 config.status이 실행된후 Makefile의 @VARIABLE@같은 것을 찾아 보는 것입니다.)
configure/setup 스크립트에 아파치 소스 트리의 최상위 디렉토리 위치를 알려줘야 합니다. 즉, --with-apache=/path/to/apache 을 적어주세요. --with-apache=/path/to/apache/src 이 아닙니다.
installation섹션을 주의깊게 읽어보세요. PHP를 컴파일하기 위해서는 flex와 bison 이 필요합니다. bison과 flex를 소스나 RPM패키지를 구해서 설치하세요.
비표준적인 위치에 존재하는 헤더파일이나 라이브러리를 찾을 수 있도록 configure 스크립트를 조정할수 있습니다. C 전처리기나 링커를 넘겨주기 위한 다음과같은 플래그를 설정함으로써 가능합니다.
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Bison 을 업그레이드할필요가 있습니다. » http://www.gnu.org/software/bison/bison.html에서 최신버전을 받을수 있을겁니다.
make의 구버전 중 일부는 functions 디렉토리안에 functions 디렉토리에 들어있는 파일을 정확하게 옮겨놓지 못합니다. cp *.o functions 명령을 실행하고 나서 make명령을 재실행시켜보세요. 이래도 똑같은 증상을 보이면, GNU make를 최신버전으로 업그레이드하세요
링크 관련 줄을 보고 정확하게 라이브러리가 설정되었는지 확인하기 바랍니다. 보통 '-ldl'이라는 옵션을 빠뜨리거나, 데이터베이스 지원을 위한 라이브러리를 빠뜨린 경우가 대부분입니다.
어떤분들의 보고에 따르면 아파치와 같이 설치할때에는 libphp4.a파일 다음에 '-ldl'옵션을 추가해야한다고 합니다.
매우 쉽습니다. 다음 단계를 차근차근 따라해보세요.
Note: 새로운 아파치의 ./configure스크립트 를 사용할수 있습니다. 아파치 디렉토리의 README.configure파일을 보거나, PHP 디렉토리의 INSTALL파일을 참고하세요.
이것은 어떤 이유로 PHP 모듈을 제대로 불려오지 못한 결과입니다. 우선은 다음의 세가지 경우를 체크하시기 바랍니다
처음에는 libphp4.a파일은 존재하지 않습니다. 그 파일은 아파치 설치 과정중에 생기는것입니다!
이 에러 메시지는 잘못된 것입니다. 요즘의 아파치버전은 이런 에러 메시지가 수정되었다고 합니다.
이경우에는 다음 세가지 경우를 확인해봐야 합니다. 첫째, 아파치가 apxs 펄 스크립트를 빌드 할때, 어떤 이유로 종종 적절한 컴파일러와 플래그 변수(flag variables)들 없이 끝나버리는 경우가 있습니다. ( which apxs 명령을수행) 대부분 /usr/local/apache/bin/apxs나 /usr/sbin/apxs 인 경우가 많습니다. 그 파일을 열어서 다음과 비슷한지 점검하십시오.
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
make명령 실행 중에 다음과 비슷한 상황이 벌어진다면:
microtime.c: In function `php_if_getrusage': microtime.c:94: storage size of `usg' isn't known microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function) microtime.c:97: (Each undeclared identifier is reported only once microtime.c:97: for each function it appears in.) microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function) make[3]: *** [microtime.lo] Error 1 make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/master/php-4.0.1/ext' make: *** [all-recursive] Error 1
당신의 시스템은 정상이 아닙니다. glibc-devel 패키지를 설치해서 /usr/include밑의 파일들을 고칠필요가 있습니다. 이것이 PHP를 위해 절대적인것은 아닙니다. 이런것을 해결하기 위해서는 다음과 같은 테스트를 해보세요.
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
우선, 이것이 경고(Warning)이고 치명적인 에러(Fatal Error)가 아니라는 것을 파악하는 것이 중요합니다. 이 메시지들이 make명령이 실행되는 동안 종종 마지막에 나오기 때문에 치명적인 에러(Fatal Error)처럼 보일지도 모르지만, 그렇지는 않습니다. 즉 컴파일러가 경고(Warning)메시지를 안보이도록 할수 있다면, 아무 메시지도 보여주지 않게 되는것입니다. 또 명심할것은 MySQL 은 기본적으로(default) 지원이 된다는것입니다.
Note:
PHP 4.3.2부터, 빌드(make)가 완료된 후 다음 텍스트를 보게 됩니다:
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
현재 PHP설치 디렉토리의 config.nice 파일이나 다음스크립트를 실행시키면 확인할수 있습니다.
<?php phpinfo(); ?>
GD라이브러리와 PHP가 관련 라이브러리(예를 들면, libpng)와 제대로 링크가 되었는지 확인하십시오.
PHP를 컴파일 할 때 GNU 유틸리티를 사용하지 않으면 문제가 발생할 수 있습니다. PHP를 컴파일할 때 적합한 GNU 툴을 사용하는지 확인해 보십시오. 예를 들어, 솔라리스에서 사용하는 SunOS BSD-호환이나 솔라리스 버전의 sed는 적합하지 않습니다. GNU나 Sub POSIX (xpg4) 버전의 sed을 사용해야 합니다. 연결: » GNU sed, » GNU flex, » GNU bison.