visual-studio - phpcs - visual studio code php 5
Compilar NGINX con Visual Studio (1)
Tengo 2 preguntas con respecto a NGINX:
¿Hay alguien que ya haya compilado NGINX con Visual Studio? Quiero crear un proyecto VS9 para compilar NGINX.
Es mi verdadera necesidad, ¿hay alguna manera de compilar NGINX como Lib o DLL?
Acabo de terminar de construir un proyecto de Visual Studio 2010 para nginx. El proceso no fue del todo sencillo, así que intentaré detallar todo lo que he aprendido. Este es un proceso de varias horas a varios días, dependiendo de su experiencia.
Paso 1: primero debes seguir la guía para compilar nginx en Windows . Esto no solo crea nginx, sino que también crea archivos .c y .h que usará al crear su proyecto de Visual Studio. No funcionará sin estos archivos. (Para más información, mira aquí )
Si tiene menos experiencia con Unix como yo, la guía anterior deja algunas preguntas sin respuesta. Así que primero voy a desarrollar esa guía con mis propios consejos, y luego, les contaré más sobre cómo crear un proyecto para Visual Studio.
Parte I: compilación de nginx para Windows utilizando MSYS
Primero, siga todos los pasos dados arriba. Instale MSYS, Strawberry Perl, Mercurial y descargue las bibliotecas PCRE, zlib y OpenSSL. Luego sigue estos pasos:
1) Abra un símbolo del sistema como administrador. A continuación, ejecute el archivo Visual Studio vc / vcvarsall.bat para configurar las variables de entorno y utilizar VC como compilador. Tus caminos serán diferentes, pero el comando que utilicé fue:
"C:/Program Files/Microsoft Visual Studio 10.0/VC/vcvarsall.bat"
Descubrí que, aunque Strawberry Perl agregó 3 rutas (que puede verificar examinando la variable PATH), todavía estaba usando el Perl incorrecto.
2) Inicie MSys ejecutando msys.bat. Para mí, MSys se instaló dentro del directorio MinGW, por lo que mi ruta era: C: / MinGW / msys / 1.0 / msys.bat
Si tiene éxito, debería ver algo como esto en verde: JensenV @ AVWMA047LB ~ (excepto con su nombre de usuario @ networkaddress en su lugar) en una ventana llamada algo así como MINGW32: ~
Es posible que se pregunte dónde está su "carpeta de inicio". Está en msys / 1.0 / home. Entonces, en mi sistema, está aquí: C: / MinGW / msys / 1.0 / home / JensenV
Si haces "ls" o "dir" este es el directorio en el que te encuentras inicialmente.
3) Suponiendo que instaló Mercurial como se indicó anteriormente, ahora debería poder consultar la fuente ngynx: hg clone http://hg.nginx.org/nginx
Esto irá al directorio mencionado anteriormente.
4) Debes asegurarte de que la versión de perl que se está usando es fresa perl, NO la versión que viene con msys. Tipo: que perl
Si obtienes algo como "/bin/perl.exe" ese es el perl incorrecto y necesitas arreglar tus rutas. Usted puede meterse con esto (como yo lo hice, sin éxito) O puede simplemente desactivar la versión de Perl que viene con msys. Acabo de cambiar el nombre de perl.exe a perl_UNUSED.exe en mi instalación de msys:
C: / MinGW / msys / 1.0 / bin
Hagas lo que hagas, asegúrate de que "que perl" muestra el camino a Strawberry Perl antes de continuar.
5) También se renombró "link.exe" en mi directorio msys / 1.0 / bin: C: / MinGW / msys / 1.0 / bin para que no se use. (es decir, cambiarle el nombre a "link_UNUSED.exe")
Creo que esto se debe a que, en el Paso 1 anterior, su "vcvarsall.bat" configuró todo para usar el compilador / enlazador de Microsoft C, pero luego en el Paso 2, el enlazador fue cambiado para usar el Msys uno. Necesitas usar el de Microsoft.
Para verificar el cambio de nombre como "link_UNUSED.exe" fue exitoso, escriba: qué vínculo y asegúrese de que apunte a su enlace de Visual Studio 10, no al link.exe que vino con msys.
6) Primero "cd nginx" luego crea un árbol de carpetas objs / lib dentro de la carpeta nginx. Descomprima / descomprima pcre, zlib y openssl aquí como se menciona en la guía .
7) Mientras su directorio actual todavía es nginx, ejecute el script de autoconfiguración de nginx, pero primero modifique el siguiente comando para cambiar las rutas de sopenssl, pcre y zlib para que sean correctas para lo que instaló en objs / lib (los números de su versión pueden ser diferentes ) El comando que utilicé fue:
auto/configure --with-cc=cl --builddir=objs --prefix= /
--conf-path=conf/nginx.conf --pid-path=logs/nginx.pid /
--http-log-path=logs/access.log --error-log-path=logs/error.log /
--sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp /
--http-proxy-temp-path=temp/proxy_temp /
--http-fastcgi-temp-path=temp/fastcgi_temp /
--with-cc-opt=-DFD_SETSIZE=1024 /
--with-pcre=objs/lib/pcre-8.33 /
--with-zlib=objs/lib/zlib-1.2.8 /
--with-openssl=objs/lib/openssl-1.0.1f /
--with-select_module --with-http_ssl_module --with-ipv6
Si desea cambiar cualquier opción de configuración , AHORA ES LA HORA. Estas opciones afectan los archivos .c y .h generados que usará más adelante para crear su proyecto de Visual Studio, y créame, no desea tener que volver a hacer eso más tarde cuando se da cuenta de que necesita diferentes opciones.
7) Hazlo.
nmake -f objs / Makefile
Si tiene éxito, su nginx.exe recién compilado debe estar dentro de su carpeta home / YourUsername / nginx / objs. es decir, algo como: C: / MinGW / msys / 1.0 / home / JensenV / nginx / objs
Además, estos archivos ahora estarán en la misma carpeta que nginx.exe: ngx_auto_config.h ngx_auto_headers.h ngx_modules.c ngx_pch.c
Los usará al crear su proyecto de Visual Studio.
8) Toma una cerveza.
**
Parte II: crear el proyecto de Visual Studio nginx
**
Cree un proyecto de Visual Studio vacío para la aplicación de línea de comandos. Guarde el proyecto dentro de su carpeta nginx (nivel de raíz). Tenga en cuenta que antes de este paso, puede mover su carpeta nginx fuera de msys a donde quiera guardarla.
1) Vaya a Propiedades -> Directorios de VC ++ y agregue estos Directorios de inclusión:
$ (MSBuildProjectDirectory) / src / core $ (MSBuildProjectDirectory) / src / event $ (MSBuildProjectDirectory) / src / event / modules $ (MSBuildProjectDirectory) / src / http $ (MSBuildProjectDirectory) / src / http / modules $ (MSBuildProjectDirectory) / src / http / modules / perl $ (MSBuildProjectDirectory) / src / mail $ (MSBuildProjectDirectory) / src / misc $ (MSBuildProjectDirectory) / src / mysql $ (MSBuildProjectDirectory) / src / os $ (MSBuildProjectDirectory) / objs $ (MSBuildProjectDirectory) / src / os / win32 $ (MSBuildProjectDirectory) / objs / lib / openssl / ssl / include $ (MSBuildProjectDirectory) / objs / lib / zlib $ (MSBuildProjectDirectory) / objs / lib / pcre
NOTA: Antes de este paso ingresé a objs / lib y eliminé los números de versión de las carpetas zlib, pcre y ssl. O debe hacer esto en O BIEN, debe modificar las rutas anteriores para que coincidan con sus versiones instaladas. Eliminé los números de versión para poder actualizar a versiones más nuevas de estas bibliotecas en el futuro sin romper mi proyecto.
Haga clic en el botón "Macros >>" y verifique que la ruta del MSBuildProjectDirectory sea una ruta a su carpeta nginx.
2) Del mismo modo, agregue estas rutas a sus directorios de biblioteca:
$ (MSBuildProjectDirectory) / objs / lib / openssl / ssl / lib / $ (MSBuildProjectDirectory) / objs / lib / pcre / $ (MSBuildProjectDirectory) / objs / lib / zlib /
De nuevo, modifique estas rutas para incluir números de versión si el contenido de su carpeta objs / lib todavía tiene números de versión.
3) Cambie estas propiedades del proyecto de la siguiente manera:
C / C ++ General: Establezca "Tratar las advertencias como errores" en el preprocesador No (WX-): Agregue estas definiciones de preprocesador: WIN32 NGX_WIN32 NGX_MAIL_SSL NO_SYS_TYPES_H FD_SETSIZE = 1024
Enlazador: Entrada: agregue lo siguiente a Dependencias Adicionales: ws2_32.lib pcre.lib ssleay32.lib libeay32.lib crypt32.lib zlib.lib
4) Cierre su solución de Visual Studio. Abra el archivo del proyecto (termina en .vcxproj) con un buen editor de texto, como Notepad ++. (Realice primero una copia de seguridad en caso de que algo salga mal). Abra también nginx / objs / makefile con un editor de texto.
En el archivo MAKE, no demasiado lejos de la parte superior, verá una sección que comienza algo así:
objs / nginx.exe: objs / src / core / nginx.obj / objs / src / core / ngx_log.obj / objs / src / core / ngx_palloc.obj / objs / src / core / ngx_array.obj / .... objs / ngx_modules.obj / objs / nginx.res / objs / lib / pcre-8.33 / pcre.lib / objs / lib / zlib-1.2.8 / zlib.lib $ (LINK) @ <<
Del mismo modo, en el archivo de Visual Studio, si ha agregado algún código fuente (agregue los archivos que desee antes de este paso, para que pueda ver de lo que estoy hablando) verá algo como esto:
Cree un nuevo documento que contenga solo los archivos .obj del archivo MAKE. Utilice Buscar y reemplazar en un editor de texto para modificarlos para que coincida con el formato del archivo de proyecto de Visual Studio en su lugar (por lo que termina en .c /> en lugar de con .obj /, y comienza con
Tampoco olvides cambiar las barras diagonales por barras invertidas. No incluya las líneas zlib.lib o pcre.lib. Se me olvida si debe incluir nginx.res. (Probablemente no.)
Una vez que esté seguro de que el formato es correcto, guarde su proyecto de Visual Studio e intente abrirlo. Si todos los archivos del archivo MAKE aparecen en su proyecto, lo hizo correctamente.
5) ¿Recuerdas esos archivos especiales .c y .h que nginx creó cuando construiste el exe? Desea agregarlos a su proyecto ahora también. Agrega estos tipos:
ngx_modules.c ngx_pch.c
6) ¡Ahora estás listo para compilar!
Honestamente, probablemente he olvidado algo en el camino, por lo que es posible que todavía tengas algún linker o errores de compilación para arreglar, ¡pero esto debería darte un buen comienzo!
NOTA: si desea cambiar qué opciones están incluidas en nginx, tendrá que hacer una nueva configuración automática en la Parte I anterior, una nueva nmake, y luego incluir código fuente adicional en su proyecto de Visual Studio, y usar el nuevo generó los archivos ngx_modules.c y ngx_pch.c en su proyecto de Visual Studio.