Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 122. PHP 소스를 윈도우 환경에서 빌드하기 [링크 복사], [링크+제목 복사],
조회: 37677
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)
PHP 소스를 윈도우 환경에서 빌드하기

저도 ^^ PHP 빌드를 한번 시도해 보았습니다. 전체적인 내용은 아래의 Wiki 문서에 기반하고 있습니다.

Build your own PHP on Windows
; https://wiki.php.net/internals/windows/stepbystepbuild 

처음부터 괜히 고생하지 않기 위해 Visual Studio 2010에서의 컴파일은 일단 포기하고, 위의 문서에서 요구하는 대로 Visual C++ 2008과 Windows SDK까지 맞춰서 설치를 했습니다.

Windows SDK for Windows Server 2008 and .NET Framework 3.5 
; http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&displaylang=en

이제, 빌드를 위한 폴더 구조를 잡아야 하는데요. 일단 모든 소스코드 환경을 담기 위해 "d:\phpbuild" 폴더를 생성해 두었습니다.

그다음, 첫 번째 작업으로 아래의 php-sdk-binary-tools-20110512.zip을 다운로드해서 압축을 해제하는데 "d:\phpbuild" 하위에 구성합니다.

php-sdk-binary-tools-20110512.zip
; http://windows.php.net/downloads/php-sdk/

여기까지, 일단 제 빌드 폴더 구성은 다음과 같습니다.

how_to_build_php_win_1.png

이제, "시작" / "Microsoft Windows SDKK v6.1" / "CMD Shell" 명령어를 실행시키고, 다음의 명령어들을 차례로 실행해 줍니다.

setenv /x86 /xp /release (디버그 모드: setenv /x86 /xp /debug)

cd /d d:\phpbuild

.\bin\phpsdk_setvars.bat

.\bin\phpsdk_buildtree.bat php53dev

아래는 제 경우에 실행해 본 화면 사례입니다.

how_to_build_php_win_2.png

그리고, 아래는 위의 작업까지 진행했을 때의 폴더 구조입니다.

how_to_build_php_win_3.png

다음으로, PHP 소스 코드를 다운로드 받습니다.

PHP 5.3.6 (tar.gz)
; http://www.php.net/downloads.php

D:\phpbuild\php53dev\vc9\x86 폴더 하위에 PHP 5.3.6 소스 코드를 풀어 놓아서, 이제 폴더 구조는 아래와 같이 구성됩니다.

how_to_build_php_win_4.png

아직 제가 PHP에 대해서는 ^^; 아무것도 모르기 때문에 deps 폴더에는 별다르게 파일들을 추가하지는 않았습니다.




처음 부분에서 준비를 해 두었던 '명령행 윈도우'로 돌아가서, 다음과 같은 명령어들을 차례대로 실행해 줍니다.

d:\phpbuild>cd D:\phpbuild\php53dev\vc9\x86\php-5.3.6

D:\phpbuild\php53dev\vc9\x86\php-5.3.6>buildconf
Rebuilding configure.js
Now run 'configure --help'

D:\phpbuild\php53dev\vc9\x86\php-5.3.6>configure --disable-all --enable-cli (디버그 모드인 경우, --enable-debug 옵션 추가)
Saving configure options to config.nice.bat
Checking for cl.exe ...  <in default path>
  Detected compiler MSVC9 (Visual C++ 2008)
  Detected 32-bit compiler
Checking for link.exe ...  d:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin
Checking for nmake.exe ...  <in default path>
Checking for lib.exe ...  <in default path>
Checking for bison.exe ...  <in default path>
Checking for re2c.exe ...  <in default path>
  Detected re2c version 0.13.5
Checking for zip.exe ...  <in default path>
Checking for lemon.exe ...  <not found>
Checking for mc.exe ...  D:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64
Checking for mt.exe ...  D:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64

Build dir: Release_TS
PHP Core:  php5ts.dll and php5ts.lib

Checking for wspiapi.h ...  <in default path>
Enabling IPv6 support
Enabling SAPI sapi\cli
Enabling extension ext\date
Enabling extension ext\ereg
Enabling extension ext\pcre
Enabling extension ext\reflection
Enabling extension ext\spl
Checking for timelib_config.h ...  ext/date/lib
Enabling extension ext\standard

Creating build dirs...
Generating files...
Generating Makefile
Generating main/internal_functions.c
Generating main/config.w32.h
Generating phpize
Done.



Enabled extensions:
-----------------------
| Extension  | Mode   |
-----------------------
| date       | static |
| ereg       | static |
| pcre       | static |
| reflection | static |
| spl        | static |
| standard   | static |
-----------------------


Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli       |
-------------


-------------------------------------------
|               |                         |
-------------------------------------------
| Build type    | Release                 |
| Thread Safety | Yes                     |
| Compiler      | MSVC9 (Visual C++ 2008) |
| Architecture  | x86                     |
-------------------------------------------


Type 'nmake' to build PHP

D:\phpbuild\php53dev\vc9\x86\php-5.3.6>

이것으로 준비는 모두 끝났고, 마지막으로 nmake를 실행해주면 빌드가 됩니다. 인텔 i7 컴퓨터의 Hyper-V Virtual Machine 환경에서 약 2분 30초 정도 걸렸습니다.

빌드 완료 후, "D:\phpbuild\php53dev\vc9\x86\php-5.3.6\Release_TS" 폴더(디버그인 경우 Debug_TS)가 생성되어 있는 것을 볼 수 있는데, 바로 그 폴더가 (".NET 개발자가 처음 설치해 본 Apache + PHP" 글에서 알아본) phpmodule 디렉터리에 넣을 내용이 되는 것입니다.

그런데, 음... ^^; 생각보다 기본 빌드 구성으로는 많이 빠져있는 것 같습니다. 예를 들어, Apache의 httpd.conf 파일 내에 LoadModule로 지정한 php5apache2_2.dll 파일도 없습니다. 그 부분은 천천히 살펴봐야겠습니다. ^^




참고 사항 1: 다음과 같은 컴파일 오류가 발생한다면?


ext\standard\browscap.c(61) : error C2001: newline in constant
ext\standard\browscap.c(62) : warning C4305: '=' : truncation from 'int' to 'char'
ext\standard\browscap.c(62) : error C2146: syntax error : missing ';' before identifier 't'
ext\standard\browscap.c(89) : error C2001: newline in constant
ext\standard\browscap.c(90) : error C2146: syntax error : missing ':' before identifier 't'
ext\standard\browscap.c(91) : error C2001: newline in constant
ext\standard\browscap.c(92) : warning C4305: '=' : truncation from 'int' to 'char'
ext\standard\browscap.c(92) : error C2143: syntax error : missing ';' before 'break'
ext\standard\browscap.c(100) : error C2001: newline in constant
ext\standard\browscap.c(102) : warning C4305: '=' : truncation from 'int' to 'char'
ext\standard\browscap.c(102) : error C2146: syntax error : missing ';' before identifier 't'
NMAKE : fatal error U1077: '"d:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\cl.exe"' : return code '0x2'
Stop.

아래의 글에서처럼 개행 문자를 일일이 소스 코드마다 다시 편집해주는 것도 가능하겠지만,

Compiler Error C2001
; https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2001

PRB: C2001: Newline in Constant for a String on Multiple Lines
; http://support.microsoft.com/kb/40160/en-us

저는 포기했습니다. 검색해 보니, 다음과 같은 글이 나오는데요.

Bug #50112 - compile error with Non-English Operating system
; http://bugs.php.net/bug.php?id=50112

댓글에 보면, 다음과 같은 해답이 나옵니다.

[2010-09-13 07:05 UTC] liuranball at gmail dot com
I just use the 0xA7 to instead of 'signum sectionis' can fix it.


0xa7로 어떻게 바꾸는지 몰라서, 저는 그냥 제어판의 "Region and Language" / "Administrative" / "Language for non-Unicode programs" 설정을 "English (United States)"로 바꿨습니다. (재부팅 해야 합니다. ^^;)




참고 사항 2: configure --help


D:\phpbuild\php53dev\vc9\x86\php-5.3.6>configure --help
Options that enable extensions and SAPI will accept 'yes' or 'no' as a
parameter. They also accept 'shared' as a synonym for 'yes' and request a
shared build of that module. Not all modules can be built as shared modules;
configure will display [shared] after the module name if can be built that
way.

  --enable-snapshot-build       Build a snapshot; turns on everything it can
                                and ignores build errors
  --enable-one-shot             Optimize for fast build - best for release and
                                snapshot builders, not so hot for
                                edit-and-rebuild hacking
  --with-cygwin                 Path to cygwin utilities on your system
  --enable-object-out-dir       Alternate location for binary objects during
                                build
  --enable-debug                Compile with debugging symbols
  --enable-debug-pack           Release binaries with external debug symbols
                                (--enable-debug must not be specified)
  --disable-zts                 Thread safety
  --with-prefix                 where PHP will be installed
  --with-mp                     Tell VC9+ use up to [n,auto,disable] processes
                                for compilation
  --with-php-build              Path to where you extracted the development
                                libraries
                                (http://wiki.php.net/internals/windows/libs).
                                Assumes that it is a sibling of this source
                                dir (..\deps) if not specified
  --with-extra-includes         Extra include path to use when building
                                everything
  --with-extra-libs             Extra library path to use when linking
                                everything
  --disable-ipv6                Disable IPv6 support (default is turn it on if
                                available)
  --enable-fd-setsize           Set maximum number of sockets for select(2)
  --enable-zend-multibyte       Enable Zend multibyte encoding support
  --with-snapshot-template      Path to snapshot builder template dir
  --enable-security-flags       Enable the compiler security flags
  --enable-static-analyze       Enable the VC compiler static analyze
  --with-aolserver              Build AOLserver support
  --enable-apache               Build Apache 1.3.x version of PHP
  --with-apache-includes        Where to find Apache 1.3 headers
  --with-apache-libs            Where to find Apache 1.3 libraries
  --enable-apache2filter        Build Apache 2.x filter
  --enable-apache2-2filter      Build Apache 2.2.x filter
  --enable-apache2handler       Build Apache 2.x handler
  --enable-apache2-2handler     Build Apache 2.2.x handler
  --with-apache-hooks           Build Apache 1.3.x (hooks) version of PHP
  --disable-cgi                 Build CGI version of PHP
  --disable-cli                 Build CLI version of PHP
  --enable-crt-debug            Enable CRT memory dumps for debugging sent to
                                STDERR
  --enable-cli-win32            Build console-less CLI version of PHP
  --enable-embed                Embedded SAPI library
  --enable-isapi                Build ISAPI version of PHP
  --enable-nsapi                Build NSAPI for Netscape/iPlanet/SunONE
                                webservers
  --with-nsapi-includes         Where to find NSAPI headers
  --with-nsapi-libs             Where to find NSAPI libraries
  --with-pi3web                 Pi3Web
  --disable-bcmath              bc style precision math functions
  --with-bz2                    BZip2
  --disable-calendar            calendar conversion support
  --disable-com-dotnet          COM and .Net support
  --disable-ctype               ctype
  --with-curl                   cURL support
  --with-dba                    DBA support
  --with-enchant                Enchant Support
  --without-ereg                POSIX extended regular expressions
  --enable-fileinfo             fileinfo support
  --disable-filter              Filter Support
  --disable-ftp                 ftp support
  --without-gd                  Bundled GD support
  --without-t1lib               t1lib support
  --with-gettext                gettext support
  --with-gmp                    Include GNU MP support.
  --disable-hash                enable hash support
  --with-mhash                  mhash support
  --without-iconv               iconv support
  --with-imap                   IMAP Support
  --with-interbase              InterBase support
  --enable-intl                 Enable internationalization support
  --disable-json                JavaScript Object Serialization support
  --with-ldap                   LDAP support
  --enable-mbstring             multibyte string functions
  --enable-mbregex              multibyte regex support
  --disable-mbregex-backtrack   check multibyte regex backtrack
  --with-mcrypt                 mcrypt support
  --with-mssql                  mssql support
  --with-dblib                  mssql support with freetds
  --without-mysqlnd             Mysql Native Client Driver
  --with-oci8                   OCI8 support
  --with-oci8-11g               OCI8 support using Oracle 11g Instant Client
  --disable-odbc                ODBC support
  --with-openssl                OpenSSL support
  --with-pgsql                  PostgreSQL support
  --with-pspell                 pspell/aspell (whatever it's called this
                                month) support
  --disable-session             session support
  --enable-shmop                shmop support
  --with-snmp                   SNMP support
  --enable-sockets              SOCKETS support
  --with-sqlite3                SQLite 3 support
  --with-config-file-scan-dir   Dir to check for additional php ini files
  --with-sybase-ct              SYBASE_CT support
  --with-tidy                   TIDY support
  --disable-tokenizer           tokenizer support
  --disable-zip                 ZIP support
  --disable-zlib                ZLIB support
  --without-libxml              LibXML support
  --without-dom                 DOM support
  --enable-exif                 exif
  --with-mysql                  MySQL support
  --with-mysqli                 MySQLi support
  --enable-pdo                  Enable PHP Data Objects support
  --with-pdo-dblib              freetds dblib (Sybase, MS-SQL) support for PDO
  --with-pdo-mssql              Native MS-SQL support for PDO
  --with-pdo-firebird           Firebird support for PDO
  --with-pdo-mysql              MySQL support for PDO
  --with-pdo-oci                Oracle OCI support for PDO
  --with-pdo-odbc               ODBC support for PDO
  --with-pdo-pgsql              PostgreSQL support for PDO
  --with-pdo-sqlite             for pdo_sqlite support
  --with-pdo-sqlite-external    for pdo_sqlite support from an external dll
  --disable-phar                disable phar support
  --enable-phar-native-ssl      enable phar with native OpenSSL support
  --without-simplexml           Simple XML support
  --enable-soap                 SOAP support
  --with-sqlite                 SQLite support
  --without-wddx                WDDX support
  --without-xml                 XML support
  --disable-xmlreader           XMLReader support
  --with-xmlrpc                 XMLRPC-EPI support
  --disable-xmlwriter           XMLWriter support
  --with-xsl                    xsl support



[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/26/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 121  122  123  124  125  126  127  128  129  130  131  [132]  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
1755정성태9/22/201434181오류 유형: 241. Unity Web Player를 설치해도 여전히 설치하라는 화면이 나오는 경우 [4]
1754정성태9/22/201424524VC++: 80. 내 컴퓨터에서 C++ AMP 코드가 실행이 될까요? [1]
1753정성태9/22/201420516오류 유형: 240. Lync로 세미나 참여 시 소리만 들리지 않는 경우 [1]
1752정성태9/21/201440981Windows: 100. 윈도우 8 - RDP 연결을 이용해 VNC처럼 사용자 로그온 화면을 공유하는 방법 [5]
1751정성태9/20/201438856.NET Framework: 464. 프로세스 간 통신 시 소켓 필요 없이 간단하게 Pipe를 열어 통신하는 방법 [1]파일 다운로드1
1750정성태9/20/201423798.NET Framework: 463. PInvoke 호출을 이용한 비동기 파일 작업파일 다운로드1
1749정성태9/20/201423714.NET Framework: 462. 커널 객체를 위한 null DACL 생성 방법파일 다운로드1
1748정성태9/19/201425330개발 환경 구성: 238. [Synergy] 여러 컴퓨터에서 키보드, 마우스 공유
1747정성태9/19/201428354오류 유형: 239. psexec 실행 오류 - The system cannot find the file specified.
1746정성태9/18/201425986.NET Framework: 461. .NET EXE 파일을 닷넷 프레임워크 버전에 상관없이 실행할 수 있을까요? - 두 번째 이야기 [6]파일 다운로드1
1745정성태9/17/201422941개발 환경 구성: 237. 리눅스 Integration Services 버전 업그레이드 하는 방법 [1]
1744정성태9/17/201430966.NET Framework: 460. GetTickCount / GetTickCount64와 0x7FFE0000 주솟값 [4]파일 다운로드1
1743정성태9/16/201420914오류 유형: 238. 설치 오류 - Failed to get size of pseudo bundle
1742정성태8/27/201426902개발 환경 구성: 236. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법 [2]
1741정성태8/26/201421282.NET Framework: 459. GetModuleHandleEx로 알아보는 .NET 메서드의 DLL 모듈 관계파일 다운로드1
1740정성태8/25/201432450.NET Framework: 458. 닷넷 GC가 순환 참조를 해제할 수 있을까요? [2]파일 다운로드1
1739정성태8/24/201426458.NET Framework: 457. 교착상태(Dead-lock) 해결 방법 - Lock Leveling [2]파일 다운로드1
1738정성태8/23/201421994.NET Framework: 456. C# - CAS를 이용한 Lock 래퍼 클래스파일 다운로드1
1737정성태8/20/201419689VS.NET IDE: 93. Visual Studio 2013 동기화 문제
1736정성태8/19/201425534VC++: 79. [부연] CAS Lock 알고리즘은 과연 빠른가? [2]파일 다운로드1
1735정성태8/19/201418123.NET Framework: 455. 닷넷 사용자 정의 예외 클래스의 최소 구현 코드 - 두 번째 이야기
1734정성태8/13/201419774오류 유형: 237. Windows Media Player cannot access the file. The file might be in use, you might not have access to the computer where the file is stored, or your proxy settings might not be correct.
1733정성태8/13/201426248.NET Framework: 454. EmptyWorkingSet Win32 API를 사용하는 C# 예제파일 다운로드1
1732정성태8/13/201434368Windows: 99. INetCache 폴더가 다르게 보이는 이유
1731정성태8/11/201426960개발 환경 구성: 235. 점(.)으로 시작하는 파일명을 탐색기에서 만드는 방법
1730정성태8/11/201422071개발 환경 구성: 234. Royal TS의 터미널(Terminal) 연결에서 한글이 깨지는 현상 해결 방법
... 121  122  123  124  125  126  127  128  129  130  131  [132]  133  134  135  ...