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

비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13359정성태5/19/20233895오류 유형: 860. Docker Desktop - k8s 초기화 무한 반복한다면?
13358정성태5/17/20234379.NET Framework: 2125. C# - Semantic Kernel의 Semantic Memory 사용 예제 [1]파일 다운로드1
13357정성태5/16/20234209.NET Framework: 2124. C# - Semantic Kernel의 Planner 사용 예제파일 다운로드1
13356정성태5/15/20234537DDK: 10. Device Driver 테스트 설치 관련 오류 (Code 37, Code 31) 및 인증서 관련 정리
13355정성태5/12/20234525.NET Framework: 2123. C# - Semantic Kernel의 ChatGPT 대화 구현 [1]파일 다운로드1
13354정성태5/12/20234580.NET Framework: 2122. C# - "Use Unicode UTF-8 for worldwide language support" 설정을 한 경우, 한글 입력이 '\0' 문자로 처리
13352정성태5/12/20234299.NET Framework: 2121. C# - Semantic Kernel의 대화 문맥 유지파일 다운로드1
13351정성태5/11/20234735VS.NET IDE: 185. Visual Studio - 원격 Docker container 내에 실행 중인 응용 프로그램에 대한 디버깅 [1]
13350정성태5/11/20234121오류 유형: 859. Windows Date and Time - Unable to continue. You do not have permission to perform this task
13349정성태5/11/20234501.NET Framework: 2120. C# - Semantic Kernel의 Skill과 Function 사용 예제파일 다운로드1
13348정성태5/10/20234344.NET Framework: 2119. C# - Semantic Kernel의 "Basic Loading of the Kernel" 예제
13347정성태5/10/20234699.NET Framework: 2118. C# - Semantic Kernel의 Prompt chaining 예제파일 다운로드1
13346정성태5/10/20234504오류 유형: 858. RDP 원격 환경과 로컬 PC 간의 Ctrl+C, Ctrl+V 복사가 안 되는 문제
13345정성태5/9/20236156.NET Framework: 2117. C# - (OpenAI 기반의) Microsoft Semantic Kernel을 이용한 자연어 처리 [1]파일 다운로드1
13344정성태5/9/20237115.NET Framework: 2116. C# - OpenAI API 사용 - 지원 모델 목록 [1]파일 다운로드1
13343정성태5/9/20234952디버깅 기술: 192. Windbg - Hyper-V VM으로 이더넷 원격 디버깅 연결하는 방법
13342정성태5/8/20234802.NET Framework: 2115. System.Text.Json의 역직렬화 시 필드/속성 주의
13341정성태5/8/20234594닷넷: 2114. C# 12 - 모든 형식의 별칭(Using aliases for any type)
13340정성태5/8/20234758오류 유형: 857. Microsoft.Data.SqlClient.SqlException - 0x80131904
13339정성태5/6/20235562닷넷: 2113. C# 12 - 기본 생성자(Primary Constructors)
13338정성태5/6/20234860닷넷: 2112. C# 12 - 기본 람다 매개 변수파일 다운로드1
13337정성태5/5/20235353Linux: 59. dockerfile - docker exec로 container에 접속 시 자동으로 실행되는 코드 적용
13336정성태5/4/20235194.NET Framework: 2111. C# - 바이너리 출력 디렉터리와 연관된 csproj 설정
13335정성태4/30/20235255.NET Framework: 2110. C# - FFmpeg.AutoGen 라이브러리를 이용한 기본 프로젝트 구성 - Windows Forms파일 다운로드1
13334정성태4/29/20234801Windows: 250. Win32 C/C++ - Modal 메시지 루프 내에서 SetWindowsHookEx를 이용한 Thread 메시지 처리 방법
13333정성태4/28/20234309Windows: 249. Win32 C/C++ - 대화창 템플릿을 런타임에 코딩해서 사용파일 다운로드1
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...