visual que objetos microsoft library dinamicos descargar crear arreglos c++ opencv visual-studio-2012 dll

c++ - que - objetos dinamicos c#



Enlaces estáticos y dinámicos en Visual Studio (1)

Las cadenas de herramientas de Windows "habituales" ofrecen dos "sabores" de .lib.

Una es las bibliotecas estáticas que mencionas. Cuando se usa, no hay asociado .dll.

La otra es una biblioteca eliminada que solo está allí para enganchar el código para cargar y arreglar punteros de funciones para la biblioteca dinámica en el momento de la carga.

Con las bibliotecas dinámicas (el .dll) puede cargarlo usted mismo (a través de LoadLibrary ) o puede usar el stub (importación) .lib que se le ha proporcionado con el .dll. Favorece la importación .lib si se proporciona una.

¿Por qué tuve que copiar los archivos .dll cuando ya vinculé las bibliotecas estáticas (.lib)?

El .dll debe estar en la ruta, o el directorio con el .exe para que el cargador lo encuentre.

¿Cómo puedo diferenciar si el archivo .lib es biblioteca estática o biblioteca dinámica?

En general, la documentación debe incluir algún nivel de detalle sobre esto. Si se agrupan en la misma carpeta, supongo que el archivo .lib está vinculado al .dll. Si todo lo demás falla, mira el tamaño del archivo; si el .lib está vinculado al .dll, entonces es normalmente pequeño en comparación con el .dll.

Entiendo el concepto de vinculación estática y dinámica. Se sabe que en la plataforma Windows, .dll son las bibliotecas dinámicas y .lib son las bibliotecas estáticas.

Mi confusión: hice un proyecto en el que tuve que usar las bibliotecas de OpenCV. Básicamente, tuve que usar las siguientes 5 bibliotecas de OpenCV:

-lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_videoio

Para este propósito, en las propiedades del proyecto, tuve que decirle al compilador la ruta de las bibliotecas en el Additional Library Directory de Additional Library Directory de VS 2012 y también tuve que decirle al vinculador sobre las bibliotecas .lib que quiero usar para el proyecto . El proyecto se compiló sin ningún error. Pero cuando intento ejecutar el proyecto, dice que falta videoio.dll (el mismo error para el resto de las bibliotecas también). Tan pronto como copié los archivos .dll dentro de la carpeta donde estaba el .exe , el proyecto funcionó bien.

Pregunta: ¿Por qué tengo que copiar los archivos .dll cuando ya vinculé las bibliotecas estáticas ( .lib )?

Pregunta adicional: Cuando uso Eclipse en Mac OS o Linux, solo tengo que decirle al compilador dónde están presentes las bibliotecas de OpenCV y al enlazador qué otras bibliotecas de OpenCV quiero usar. Nunca tuve que colocar las bibliotecas dinámicas en la carpeta .exe en ese caso.