Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 122. PHP 소스를 윈도우 환경에서 빌드하기 [링크 복사], [링크+제목 복사],
조회: 37610
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  161  162  163  164  [165]  ...
NoWriterDateCnt.TitleFile(s)
917정성태8/26/201021798개발 환경 구성: 86. "Routing and Remote Access"의 "Routing" 기능 활성화 방법
916정성태8/25/201021120개발 환경 구성: 85. 가상 네트워크에 LAN 어댑터 보이거나 감추는 방법
915정성태8/24/201039260개발 환경 구성: 84. Hyper-V의 네트워크 유형 (2)
913정성태8/22/201028345오류 유형: 104. Hyper-V 관리자 - VM 생성 오류 (VHD 생성 오류)
912정성태8/20/201030251.NET Framework: 183. 구조체 포인터 인자에 대한 P/Invoke 정의파일 다운로드1
911정성태8/19/201027124오류 유형: 103. System.Reflection.TargetException파일 다운로드1
910정성태8/19/201037939개발 환경 구성: 83. Hyper-V의 네트워크 유형 (1)
909정성태8/18/201033331오류 유형: 102. System.MissingMethodException
908정성태8/17/201024332개발 환경 구성: 82. Windows Virtual PC의 네트워크 유형 (3)
907정성태8/14/201021846개발 환경 구성: 81. Windows Virtual PC의 네트워크 유형 (2)
906정성태8/13/201030752개발 환경 구성: 80. Windows Virtual PC의 네트워크 유형 (1)
905정성태8/8/201032908Team Foundation Server: 39. 배치 파일로 팀 빌드 구성 [2]파일 다운로드1
904정성태8/8/201035669오류 유형: 101. SignTool Error: No certificates were found that met all the given criteria. [2]
903정성태8/6/201032528Team Foundation Server: 38. TFS 소스 코드 관리 기능 (4) - Branch
902정성태8/5/201024873Team Foundation Server: 37. TFS 2010의 소스 서버 수작업 구성
901정성태8/4/201024158Team Foundation Server: 36. TFS 소스 코드 관리 기능 (3) - Label
900정성태8/3/201026785Team Foundation Server: 35. TFS 소스 코드 관리 기능 (2) - Shelveset
899정성태8/2/201028861Team Foundation Server: 34. TFS 소스 코드 관리 기능 (1) - Changeset
898정성태7/31/201028389.NET Framework: 182. WCF의 InactivityTimeout [1]파일 다운로드1
897정성태7/26/201129617.NET Framework: 181. AssemblyVersion, AssemblyFileVersion, AssemblyInformationalVersion [4]
896정성태7/25/201036370.NET Framework: 180. C# Singleton 인스턴스 생성 [2]
895정성태7/25/201020260VS.NET IDE: 68. Visual Studio 2010 - .NET 1.1 원격 디버깅
894정성태7/25/201026172오류 유형: 100. Could not find the Database Engine startup handle. [1]
893정성태7/25/201027287오류 유형: 99. .NET 4.0 설치된 윈도우 7에서 SQL Server 2008 R2 설치 오류
892정성태7/9/201029071오류 유형: 98. 영문 윈도우에 한글 SQL Server 2008 R2 설치할 때 오류 [4]
891정성태7/8/201024891오류 유형: 97. MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = '{...}'. Error code: 1605. [2]
... 151  152  153  154  155  156  157  158  159  160  161  162  163  164  [165]  ...