2011-01-03 8 views
8

Tengo una aplicación de terceros con la fuente, que actualmente está configurada para compilarse contra libeay32MD.lib. Pero esta es una aplicación, no una biblioteca. ¿No debería construirse contra libeay32MT.lib entonces? ¿Cuál es la diferencia entre dos?¿Cuál es la diferencia entre enlazar contra libeay32MD.lib y libeay32MT.lib?

Existen las siguientes variantes de bibliotecas:

  • libeay32MD.lib
  • libeay32MDd.lib
  • libeay32MT.lib
  • libeay32MTd.lib

y los "estáticos" con el mismo nombre ¿Puedes explicar la diferencia entre todos ellos?

Respuesta

8
  • MD para la liberación dinámica
  • MDd para dinámico-debug
  • MT para la liberación estática
  • MTd para estática-debug

Source article través archive.org [^ 1] .

[^ 1]: Original Link

+0

Muchas gracias. ¿Entiendo correctamente que esa dinámica significa que Target Exe requerirá las DLL de OpenSSL y estática significa que todo el código de OpenSSL se fusiona en el ejecutable de destino y no se requieren DDL externos? –

+1

Sí, eso es correcto. No soy un experto en esto, pero básicamente significa que los archivos DLL tienen que estar en el mismo directorio que el archivo .exe o deben estar en su ruta. Hay formas más elaboradas de registrar archivos DLL y cosas por el estilo, pero el infierno de DLL me pone loco y termino simplemente pegándolos en el directorio .exe. – metasim

+0

El enlace está roto. Esto es del archivo web: http://web.archive.org/web/20110415080451/http://www.curlpp.org/index.php/faq/50-how-to-build-openssl-on-win32- plataforma-para-usar-con-libcurl – loentar

0

Adivinando a partir de los nombres, una biblioteca es para multihilo y la otra para multihilo con símbolos de depuración.

+0

No estoy seguro porque también hay libeay32MTd.lib y libeay32MDd.lib. Pregunta actualizada –

7

Estas variaciones determinan qué biblioteca de C++ se utiliza, y qué tipo de código es generado, aunque sólo 'M' está disponible significa multi-hilo, no hay opciones de un único subproceso nunca más.

  • MTd = Multi roscado código de depuración, y la vinculación a la biblioteca de depuración estática C++
  • MDd = Multi roscado código de depuración, y la vinculación a dinámica C++ (DLL) de la biblioteca de depuración
  • MT = multi-hilo, que une a biblioteca estática C++
  • MD = multi-hilo, que une a C++ dinámico (DLL) de la biblioteca

acaba de editar - lo siento, códigos estaban en orden incorrecto.

Edición 2: Más información ...

Estas banderas son C++ opciones y nada que ver con que requiere ssleay32.dll y libeay32.dll. Hay 8 versiones de libeay32 - 4 para una compilación estática (sin dependencia en ssl/libeay32.dll) y 4 para compilación dinámica (requiere ssl/libeay32.dll). Cada uno de los 4 están divididos en el tipo de biblioteca de C++ requerido ...

C++ está disponible para enlazar estática o dinámica a su aplicación, y para cada uno de estos tipos se pueden utilizar las bibliotecas de depuración o liberar las bibliotecas.

/MT y/MTd (estático) no requieren el código redistribuible de C++ porque todas las llamadas de C/C++ están contenidas dentro de su programa compilado.Si cada uno de los módulos (no solo ssleay & co.) Que enlaza utiliza estas opciones, su aplicación será totalmente independiente en términos de dependencias C++.

/MD y/MDd (dinámico) necesitan las DLL redistribuibles de C++ instaladas en la computadora de destino. Para/MD, las versiones se descargan fácilmente de MSFT, pero también debe tener en cuenta qué versión de Visual C++ utilizó, p. Ej. VC++ 2008, VC++ 2010 etc. hay muchas versiones de la redistribuible que pueda necesitar. Para/MDd, las bibliotecas estarán en su computadora de desarrollo pero no hay una versión general de MSFT para esto, pero puede construir su propio instalador si es necesario usando Visual Studio; usualmente/MDd solo es usado por el desarrollador para la prueba.

Las versiones de SSLEAY etc. en la pregunta original no indican qué versión de 2005/2008/2010 etc. de Visual C++ se utilizó para compilar las versiones de MD, pero una vez compilada, se puede observar desde el destino construido utilizando una dependencia espectador (por ejemplo, depends.exe). P.ej. si su aplicación depende de MSVCR90.DLL, entonces eso significa VC++ 9 (confusamente, esa es la redistribuible de 2008).

Todos los desarrolladores necesitan la opción de elegir la vinculación estática o biblioteca DLL, he aquí algunas notas sobre cada uno:

vinculación estática:

  • autónomo, fácil de instalar, mayor huella de código, la duplicación de código al construir múltiples dll y exe's.

vinculación dinámica:

  • huella más pequeña, correcciones de errores de actualizaciones MSFT, código compartido, un poco más difícil de instalar

Cuando se tiene el código en una biblioteca que devuelve un C/Objeto C++ (por ejemplo, memoria asignada, std :: cadena, etc.) es obligatorio para vincular su código con los mismos indicadores utilizados para compilar la biblioteca, sin excepciones.

Cuestiones relacionadas