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

비밀번호

댓글 작성자
 




... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...
NoWriterDateCnt.TitleFile(s)
13214정성태1/10/202313889.NET Framework: 2087. .NET 6부터 SourceGenerator와 통합된 System.Text.Json [1]파일 다운로드1
13213정성태1/9/202312215오류 유형: 836. docker 이미지 빌드 시 "RUN apt install ..." 명령어가 실패하는 이유
13212정성태1/8/202313593기타: 85. 단정도/배정도 부동 소수점의 정밀도(Precision)에 따른 형변환 손실
13211정성태1/6/202313350웹: 42. (https가 아닌) http 다운로드를 막는 웹 브라우저
13210정성태1/5/202312136Windows: 219. 윈도우 x64의 경우 0x00000000`7ffe0000 아래의 주소는 왜 사용하지 않을까요?
13209정성태1/4/202311561Windows: 218. 왜 윈도우에서 가상 메모리 공간은 64KB 정렬이 된 걸까요?
13208정성태1/3/202312409.NET Framework: 2086. C# - Windows 운영체제의 2MB Large 페이지 크기 할당 방법파일 다운로드1
13207정성태12/26/202212892.NET Framework: 2085. C# - gpedit.msc의 "User Rights Assignment" 특권을 코드로 설정/해제하는 방법 [1]파일 다운로드1
13206정성태12/24/202213050.NET Framework: 2084. C# - GetTokenInformation으로 사용자 SID(Security identifiers) 구하는 방법 [4]파일 다운로드1
13205정성태12/24/202212226.NET Framework: 2083. C# - C++과의 연동을 위한 구조체의 fixed 배열 필드 사용 (2)파일 다운로드1
13204정성태12/22/202211403.NET Framework: 2082. C# - (LSA_UNICODE_STRING 예제로) CustomMarshaler 사용법파일 다운로드1
13203정성태12/22/202211829.NET Framework: 2081. C# Interop 예제 - (LSA_UNICODE_STRING 예제로) 구조체를 C++에 전달하는 방법파일 다운로드1
13202정성태12/21/202213171기타: 84. 직렬화로 설명하는 Little/Big Endian파일 다운로드1
13201정성태12/20/202214291오류 유형: 835. PyCharm 사용 시 C 드라이브 용량 부족
13200정성태12/19/202212289오류 유형: 834. 이벤트 로그 - SSL Certificate Settings created by an admin process for endpoint
13199정성태12/19/202212329개발 환경 구성: 656. Internal Network 유형의 스위치로 공유한 Hyper-V의 VM과 호스트가 통신이 안 되는 경우
13198정성태12/18/202212566.NET Framework: 2080. C# - Microsoft.XmlSerializer.Generator 처리 없이 XmlSerializer 생성자를 예외 없이 사용하고 싶다면?파일 다운로드1
13197정성태12/17/202212107.NET Framework: 2079. .NET Core/5+ 환경에서 XmlSerializer 사용 시 System.IO.FileNotFoundException 예외 발생하는 경우파일 다운로드1
13196정성태12/16/202212702.NET Framework: 2078. .NET Core/5+를 위한 SGen(Microsoft.XmlSerializer.Generator) 사용법
13195정성태12/15/202213059개발 환경 구성: 655. docker - bridge 네트워크 모드에서 컨테이너 간 통신 시 --link 옵션 권장 이유
13194정성태12/14/202213344오류 유형: 833. warning C4747: Calling managed 'DllMain': Managed code may not be run under loader lock파일 다운로드1
13193정성태12/14/202213505오류 유형: 832. error C7681: two-phase name lookup is not supported for C++/CLI or C++/CX; use /Zc:twoPhase-
13192정성태12/13/202213404Linux: 55. 리눅스 - bash shell에서 실수 연산
13191정성태12/11/202215313.NET Framework: 2077. C# - 직접 만들어 보는 SynchronizationContext파일 다운로드1
13190정성태12/9/202216843.NET Framework: 2076. C# - SynchronizationContext 기본 사용법파일 다운로드1
13189정성태12/9/202216898오류 유형: 831. Visual Studio - Windows Forms 디자이너의 도구 상자에 컨트롤이 보이지 않는 문제
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...