EZ-S3C6410에서 실행되는 PHP 컴파일 방법

 

지난번에 EZ-S3C6410에서 lighttpd 실행할 수 있게 간단하게(?) 컴파일과 실행을 했었습니다.

 

현재 웹서버라고 하면, html 로만 무엇인가를 만들기엔 부족한 듯 싶습니다.

홈페이지를 만든다면 PHP로 동작되야 고급 기술이 사용된거 같고, 다양한 기능을 활용할 수 있습니다.

 

그래서 보드에서도 웹 서버를 돌려보자는 의지로...

처음에 Apache2 와 PHP를 연동해보자 하였으나...... 컴파일 및 이해가 부족하여 실패를 하였습니다. orz

 

하지만, 이번에 Apache2 대신 lighttd를 컴파일 하면서 PHP 를 연결할 수 있는 방법들을 찾아 적용해보게 되었습니다.

 

 

1. 작업 환경

 

개발서버 : Ubuntu 11.04 Server 버전

툴체인 : arm-linux-gnueabi-4.3.2.tar.gz
           (ftp://ftp.falinux.com/toolchain_ramdisk/recommendation/gcc-4.3.2/arm-linux-gnueabi-4.3.2.tar.gz 파일 사용)

 

타겟보드 : 에프에이리눅스 EZ-S3C6410 보드

 

 

2. PHP 다운로드

 

php 기본 홈페이지 주소는 아래와 같습니다.

홈페이지 : http://www.php.net

 

현재 안정화된 버전은 5.3.8 입니다.

 

 

먼저 5.3.8 버전을 다운로드 받아서 테스트를 해보았습니다.

당연한 이야기지만, 에러가 나왔습니다.

 

해결해보려고 했습니다만, 중요한 문제점에 부딪치고 말았습니다.

결정적으로 컴파일을 할 때, gcc 버전이 4.3.4 이상이이어야 했습니다.

 

저희 툴체인의 gcc 버전은 4.3.3 이라서 컴파일이 안되는거였습니다.

 

그래서 결론적으로 최신 버전을 받지 못하고 PHP 5.3.1 버전을 찾아서 진행을 하였습니다.

 

다운로드 http://dpvps.googlecode.com/files/php-5.3.1.tar.gz

 

 

3. 다운로드 및 압축 풀기

 

파일을 다운로드 받도록 합니다.

 

$ wget http://dpvps.googlecode.com/files/php-5.3.1.tar.gz

 

다운로드 받은 파일의 압축을 풀어줍니다.

 

$ tar zxvf php-5.3.1.tar.gz

 

압축을 푼 다음 php-5.3.1 폴더 안으로 이동합니다.

 

$ cd php-5.3.1

 

 

4. libxml2 컴파일

 

php 를 컴파일 하기 위해서는 libxml2를 먼저 컴파일 해줘야 합니다.

아래 순서대로 진행을 해줍니다.

 

libxml의 공식 홈페이지 : http://xmlsoft.org/

 

홈페이지에서 libxml2 2.7.8 버전을 다운로드 받도록 합니다. (문서를 작성시 libxml2 2.7.8 이 최신 버전이었습니다.)

 

$ wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
$ tar zxvf libxml2-2.7.8.tar.gz
$ cd libxml2-2.7.8

 

압축을 푼 다음, 아래와 같이 configure 옵션을 줍니다.

참고로 설치 폴더는 /usr/local/libxml2 으로 지정하였습니다.

 

$ CC=arm-generic-linux-gnueabi-gcc \
AR=arm-generic-linux-gnueabi-ar \
LD=arm-generic-linux-gnueabi-ld \
NM=arm-generic-linux-gnueabi-nm \
RANLIB=arm-generic-linux-gnueabi-ranlib \
STRIP=arm-generic-linux-gnueabi-strip \
./configure --prefix=/usr/local/libxml2 \
--host=arm-generic-linux-gnueabi --build=i686 \
--target=arm-generic-linux-gnueabi

 

configure 명령이 끝난 후, make 를 실행합니다.

 

$ make

 

make 가 끝나면 make install 명령을 통해서 설치를 합니다.

 

$ sudo make install

 

아마 별 어려움 없이 설치가 완료됐을겁니다.

 

 

5. PHP 컴파일

 

다시 본론으로 돌아와서 PHP 컴파일을 해줍니다.

 

PHP 옵션이 많지만, 기본적인 내용을 중심으로 설정을 하였습니다.
참고로 설치 폴더 위치를 --prefix=/usr/local/php 로 설정하였습니다.

당연한 이야기지만, S3C6410 용으로 컴파일 하기 위해 arm-generic-linux-gnueabi을 사용합니다.

 

아래와 같이 configure 를 실행합니다.

 

$ CC=arm-generic-linux-gnueabi-gcc \
CXX=arm-generic-linux-gnueabi-g++ \
LD=arm-generic-linux-gnueabi-ld \
NM=arm-generic-linux-gnueabi-nm \
RANLIB=arm-generic-linux-gnueabi-ranlib \
AR=arm-generic-linux-gnueabi-ar \
STRIP=arm-generic-linux-gnueabi-strip \
./configure --host=arm-generic-linux-gnueabi \
--build=i686-linux-gnu --target=arm-generic-linux-gnueabi \
--prefix=/usr/local/php --without-pear --disable-debug \
--enable-libxml --enable-sockets --with-libxml-dir=/usr/local/libxml2 \
--without-iconv --disable-cli

 

configure 명령이 끝난 후, make 를 실행합니다.

 

$ make

 

make 를 수행하다보면 중간에 에러가 납니다.

 

 

5. PHP 컴파일 오류 수정

 

오류 메시지 : make: *** [sapi/cgi/php-cgi] Error 1

 

(생략)
main/php_ini.o: In function `php_load_php_extension_cb':
/php-5.3.1/main/php_ini.c:349: undefined reference to `php_load_extension'
collect2: ld returned 1 exit status
make: *** [sapi/cgi/php-cgi] Error 1

 

위와 같은 에러가 발생 시에는 아래와 같이 파일을 수정하도록 합니다.

 

$ vi ext/standard/dl.c

 

수정 전
23
24

#include "php.h"
#include "dl.h"

 

아래와 같이 #define HAVE_LIBDL 1 항목을 추가해주면 됩니다.

 

수정 후

23
24
25 
26

#define HAVE_LIBDL 1

#include "php.h"
#include "dl.h"

 

수정을 한 다음, 다시 make 명령을 수행합니다.

 

$ make

 

make 가 끝나면 make install 명령을 통해서 설치를 한다.

 

$ sudo make install

 

아래와 같은 메시지가 출력되면서 설치가 완료됩니다.

 

Installing PHP SAPI module:       cgi
Installing PHP CGI binary: /usr/local/php/bin/
Installing build environment:     /usr/local/php/lib/php/build/
Installing header files:          /usr/local/php/include/php/
Installing helper programs:       /usr/local/php/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PDO headers:          /usr/local/php/include/php/ext/pdo/

 

컴파일이 무사히 끝났습니다.

 

 

6. 환경 파일 복사

 

실수로 빼먹을 뻔 했네요.

php 가 동작하기 위해서는 php.ini 라는 환경 파일을 필요로 합니다.

 

php-5.3.1 소스 폴더 내에 보면 php.ini-development 파일이 있습니다.
이것을 설치된 위치 /usr/local/php/ 안에 lib/ 폴더로 복사를 해줍니다.

 

$ sudo cp -a php.ini-development /usr/local/php/lib/php.ini

 

 

컴파일은 끝? 그 다음엔....

 

PHP 컴파일은 무사히 끝났습니다.

컴파일을 끝냈으니, 이제는 EZ-S3C6410 보드에 올려보고 테스트를 해봐야 할 차례입니다.

 

PHP 실행하는 방법의 궁금증은 다음주로 미뤄놓겠습니다. 후훗~