2011-12-11 10 views
11

Esto me está volviendo loco, estoy tratando de construir la librería log4cxx para usar en un proyecto de C++ que he estado usando. Estoy en un host win7 que ejecuta VS2010 express C++ edition. He seguido las instrucciones según las instrucciones de log4cxx(), incluyendo la descarga de apr y apr-util y de los archivos .hw, pero desafortunadamente, cuando intento cargar la solución log4cxx.dsw y convertirla al VS actual, Recibo un error al tratar de compilar apr.apr/dsw y muchos otros archivos .dsw dependientes. ¿Alguna sugerencia?construyendo log4cxx en vs 2010 C++

En concreto, lo que estoy viendo es:

The Project file 'C:\...projects\apr-util\xml\expat\lib\xml.dsp' cannot be loaded. Do you want to remove the unloadable project from the solution? 

veo esto por un montón de otros archivos .dsp.

continuación, en el cuadro de salida en VC:

C:\Users\x\Documents\Visual Studio 2010\Projects\apr\apr.dsp : error : Project upgrade failed. 

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\xml\expat\lib\xml.dsp : error : Project upgrade failed. 

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\aprutil.dsp : error : Project upgrade failed. 

C:\Users\x\Documents\Visual Studio 2010\Projects\apache-log4cxx-0.10.0\projects\log4cxx.dsp : error : Project upgrade failed. 

Gracias

Los archivos están en el camino correcto.

+0

¿Qué pasa después Visual Studios than 2010? ¿Hay quizás algún camino más fácil? –

Respuesta

22

usted tiene que seguir estos pasos para obtener log4cxx (Versión 0.10.0) que trabajan con VS2010:

  1. descargar el último paquete de log4cxx here
  2. Descargar APR y paquetes postales apr-util de here
  3. Extracto log4cxx, abr und apr-util en el mismo directorio
  4. Cambiar el nombre de la carpeta y apr_VERSION abr util_VERSION a APR y apr-util que resulta en un directorio con tres carpetas: Apache-log4cxx-0.10.0, abril y APR - util
  5. Cambio en el directorio log4cxx y ejecutar configure.bat
  6. Cambiar para apr-util/include direcotry y abierto apu.hw en un editor de texto de su elección
  7. Busque la entrada #define APU_HAVE_APR_ICONV, ponerlo a 0 y guardar el archivo
  8. Abra apr_ldap.hw desde el mismo directorio y busque la entrada #define APR_HAS_LDAP, configúrelo en 0 y guarde también el archivo.
  9. Cambie al directorio log4cxx/projects y abra log4cxx.dsw con VS2010.Responder a las solicitudes de conversión de VS2010 con un sí/ok para cada proyecto (abr-apr-util, log4cxx, xml)

Ok si se golpea construye ahora, entonces se verá alrededor de 2000 los errores y que es donde está el interesante y La parte "difícil" comienza:

  • Ctrl + F y busca cada entrada de la macro "LOG4CXX_LIST_DEF". Tienes que mover estas entradas de su clase relacionada y justo antes de la misma clase. A veces también necesita mover un typedef o agregar la clase justo antes de la macro.

Algunos ejemplos:

// telnetadapter.h 
    ... 
    typedef log4cxx::helpers::SocketPtr Connection; 
    LOG4CXX_LIST_DEF(ConnectionList, Connection); 
    class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton 
    ... 

    // appender.h 
    ... 
    class Appender; 
    LOG4CXX_PTR_DEF(Appender); 
    LOG4CXX_LIST_DEF(AppenderList, AppenderPtr); 

    class Layout; 
    typedef log4cxx::helpers::ObjectPtrT<Layout> LayoutPtr; 

    ... 

    class LOG4CXX_EXPORT Appender : 
       public virtual spi::OptionHandler 
    { 
    ... 
  • Si el compilador se queja de conjunto de claves no ser miembro del LoggingEvent, basta con retirar el alcance (desde que nos mudamos del tipo de fuera de la clase en el paso anterior , estos tipos ya no están dentro de la clase)

Ejemplo:

// old 
    LoggingEvent::KeySet set; 
    // new 
    KeySet set; 
  • Si el compilador se queja de insert_iterator no estar en el espacio de nombres std, añadir #include <iterator> a la sección de incluir el archivo de origen.

  • Por último, pero no menos importante, haga clic en proyecto log4cxx y seleccione Agregar referencia y seleccione los otros 3 proyectos como referencia


Hope esto y algunos otros :) ayuda ... si necesita la solución completa u otros archivos, ¡hágamelo saber!

He descubierto estos pasos con la enorme ayuda de this entrada de blog de Lex LI.

EDIT: Puede descargar mi solución VS2010 y el código fuente de mi cuadro de selección: https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z

+0

es log4cxx un proyecto muerto? –

4

Capítulo 1 Oficial pasos

vamos a seguir los pasos aquí, http://logging.apache.org/log4cxx/building/vstudio.html. Sin embargo, debemos hacer cambios para adaptarnos a Windows/VS201 *.

  1. descargue la versión posterior de log4cxx que es apache log4cxx 0.10 de aquí, http://logging.apache.org/log4cxx/download.html

  2. dependencias de descarga de https://archive.apache.org/dist/apr/

  3. La guía oficial de construcción es bastante fácil de seguir:

unzip apr-1.2.11-win32-src.zip 
rename apr-1.2.11 apr 
unzip apr-util-1.2.10-win32-src.zip 
rename apr-util-1.2.10 apr-util 
cd apache-log4cxx-0.10.0 
configure 
configure-aprutil 
  1. Recomiendo usted instala gow en su máquina de desarrollo, entonces tendrá muchas herramientas de Unix/Linux, muy convenientes. o si tiene git, puede agregar herramientas git cmd en su env.
configure 
configure-aprutil 

por encima de 2 cmd requiere sed.exe, instalarlo (Gow/GIT) antes de ejecutarlos. o puede cambiar apu.hw y apr_ldap.hw manualmente:

Abra apr_ldap.hw y busque la entrada #define APR_HAS_LDAP, ajústelo en 0 y guarde también el archivo. apu.hw abierto y encontrar la entrada APU_HAVE_APR_ICONV #define, ponerlo a 0 y guardar el archivo

Capítulo 2 Edificio log4cxx

  1. Ahora tenemos que convertir * * .dsw a .cxproj . Para hacerlo más fácil, simplemente inicie Visual Studio 201 * y abra log4cxx.dsw. VS le preguntará si desea convertir todo. Simplemente haga clic en Sí.

  2. Establezca log4cxx como proyecto de inicio.

  3. Abra la ventana de propiedades del proyecto log4cxx, agregue otros 3 proyectos como referencias, aquí: propiedades -> propiedades comunes -> marco y referencias.
  4. Hit F7, si ves C2252 de error, esto se debe a LOG4CXX_LIST_DEF definir error, vaya a su definición y cambiarlo a

#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N

como este,

antigua:

#define LOG4CXX_LIST_DEF(N, T) \ 
template class LOG4CXX_EXPORT std::allocator<T>; \ 
template class LOG4CXX_EXPORT std::vector<T>; \ 
typedef std::vector<T> N 

nuevo:

#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N 
  1. yu conocer a otro err sobre insert_iterator, basta con añadir #include < iterador> archivo relativa a

  2. Hecho! ¡disfruta tu log4cxx!

0

Para construir log4cxx en Windows 7 de 64 bits con Visual Studio 2015, que tenía que hacer unos pasos, además de la respuesta de Scott, y tienen algunas aclaraciones.

  1. Descargue el último paquete ZIP log4cxx (apache 0.10.0) de here.
  2. Descargue los paquetes ZIP apr y apr-util de here.
  3. Extraiga log4cxx, apr y apr-util en el mismo directorio.
  4. De las instrucciones oficiales y la respuesta de seveves: Cambiar el nombre de la carpeta y apr_VERSION abr util_VERSION a APR y apr-util que resulta en un directorio con tres carpetas: Apache-log4cxx-0.10.0, abril y apr-util
  5. Desde una línea de comando de Visual Studio, cd al directorio log4cxx y ejecute "configure". Esto no funcionará desde un shell git bash en caso de que intentes utilizarlo para el siguiente paso.
  6. La siguiente secuencia de comandos requiere sed, por lo que tiene algunas opciones:
    • editar los archivos manualmente como se describe en las otras respuestas.
      • Cambie al directorio apr-util/include y abra apu.hw en un texto de su elección. Busque la entrada #define APU_HAVE_APR_ICONV, establézcala en 0 y guarde el archivo. Abra apr_ldap.hw desde el mismo directorio y busque la entrada #define APR_HAS_LDAP, configúrelo en 0 y guarde el archivo también.
    • Instale sed desde GNUWin32 y agréguelo a su RUTA, luego ejecute "configure-aprutil" desde el directorio log4cxx desde un símbolo del sistema de Windows.
    • Utilice el sed que viene con una instalación de Windows git ejecutando "configure-aprutil" desde el directorio log4cxx desde un indicador de Git Bash.
  7. Abra Visual Studio 2015. Abra el proyecto log4cxx.dsw del directorio de proyectos. Deje que Visual Studio lo convierta.
  8. Establecer log4cxx como proyecto de inicio y compruebe que los otros 3 proyectos se muestran como dependencias (clic derecho -> dependencias de compilación -> Dependencias del proyecto)
  9. Ahora había tres de los proyectos que muestran con "(Visual Studio 2010) "al lado de ellos. Esto provocó un error de enlace más tarde debido a los cambios en stdio:

    4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__wenviron 4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__environ 4>apr-1.lib(filedup.obj) : error LNK2019: unresolved external symbol __imp___iob_func referenced in function apr_file_dup2

    Cambiar esto de ir a las Propiedades de cada proyecto y el cambio de la "Plataforma conjunto de herramientas" para todas las configuraciones de Visual Studio 2015.

  10. La solución ahora está configurada para 32 bits. Ve a Build> Configuration Manager. Cambie la plataforma a x64. Tres de los proyectos cambiarán pero log4cxx todavía dice Win32. Haga clic en eso y vaya a Nuevo ... Agregue x64 y desmarque "Crear nueva plataforma de solución". Haga clic en Aceptar. Asegúrate de que "Build" esté marcada para los 4 proyectos.
  11. Si construye ahora, verá los errores de la plantilla c2252. Abra log4cxx.h
    • Cambie la línea que contiene "#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)" a "#if defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)".
    • Cambie la línea que contiene "#elif defined(_MSC_VER) && !defined(LOG4CXX_STATIC)" a "#elif defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC)".
  12. El siguiente error será sobre insert_iterator en stringhelper.cpp. Agregue #include <iterator> a ese archivo.
  13. entonces hay un error de enlace:

    apr-1.lib(rand.obj) : error LNK2019: unresolved external symbol __imp__UuidCreate

    Para solucionar este problema, vaya a log4cxx Propiedades> Enlazador> Entrada y añadir rpcrt4.lib

  14. Ahora la solución debe construir y y la biblioteca enlace a su aplicación de 64 bits. Repita para las configuraciones de depuración/liberación si solo estuviera editando una.

  15. (Opcional) La solución no agrega el sufijo "d" común a la biblioteca de depuración. Para agregarlo, abra las Propiedades para la configuración de depuración. Vaya a Enlazador> General> Archivo de salida y restablezca a predeterminado. Vaya a Enlazador> Avanzado> Importar biblioteca y restablezca a predeterminado. Haga esto para la configuración Release también para que compilarán en los directorios correspondientes. Para solo la configuración de depuración, vaya a General y agregue una "d" al final del nombre de destino.