2008-10-17 13 views
11

He trabajado con un par de compiladores de Visual C++ (VC97, VC2005, VC2008) y realmente no he encontrado una forma clara de agregar bibliotecas externas a mis compilaciones. ¡Vengo de un fondo de Java, y en las bibliotecas de Java lo son todo!¿Cómo se agregan las bibliotecas externas para la compilación en VC++?

Entiendo por compilación de proyectos de código abierto en mi caja de Linux que todo el código fuente de la biblioteca parece necesitar ser incluido, con la excepción de esos archivos .so.

También he oído hablar de las bibliotecas estáticas .lib y las bibliotecas dinámicas .dll, pero todavía no estoy del todo seguro de cómo agregarlas a una compilación y hacerlas funcionar. ¿Cómo se puede hacer esto?

Respuesta

6

En creo que se puede preguntar la mecánica de cómo añadir un lib a un proyecto/solución en los entornos de desarrollo ...

En 2003, 2005 y 2008 que es algo similar a:

desde el explorador de soluciones - haga clic derecho sobre el proyecto seleccione propiedades (típicamente duran de uno) lo general seleccionar todas las configuraciones en la parte superior ... Enlazador entrada

dependencias adicionales entra allí

Ojalá pudiera hacer una captura de pantalla para esto.

En VC6 es diferente oso conmigo ya que esto es todo de la memoria

configuraciones o propiedades del proyecto y luego ir a la pestaña enlazador y encontrar donde se pueden agregar las librerías.

Disculpe la naturaleza fortuita de esta publicación. Creo que eso es lo que quieres, sin embargo.

8

Ok. normalmente no desea cargar bibliotecas dinámicas a mano, pero si lo hace, mire en LoadLibrary. luego tiene que llamar a otras funciones para obtener direcciones de puntero a funciones, etc. Normalmente, la forma en que funciona, incluso los archivos .dll tienen archivos .lib para ellos ... por lo que cuando se necesitan, simplemente se cargan automáticamente.

cómo especifiy .lib files/static libraries está en Properties/Linker/Input-> Additional Dependencies. en la GUI.

si está scripting this .. bien. usted solo especifica los archivos .lib en la línea de comando en el momento del enlace.

0

¿Qué quiere decir "agregarlos a una compilación"?

En VC, dentro de una solución, puede tener un proyecto cuya salida sea una biblioteca (estática o dinámica) y luego otro proyecto que dependa de la salida y la use (es decir, enlaces a ella).

En nuestra base de código, generalmente tenemos una solución separada para cada biblioteca o conjunto de bibliotecas y luego las vinculamos a proyectos de destino. La mayoría de nuestros proyectos de destino son ensamblados administrados; aquellos que necesitan funcionalidades no administradas generalmente se escriben en C++ administrado o C++/CLI y se enlazan en bibliotecas estáticas no administradas. Hemos encontrado que este ha sido el más fácil de mantener ya que las bibliotecas no administradas son las menos cambiantes.

12

Las bibliotecas en C++ también se consideran útiles, pero la forma de integrarlas es diferente a Java porque el compilador solo tiene que ver la interfaz de la biblioteca, que generalmente se declara en archivos de encabezado. En Java, el compilador tendrá que inspeccionar las bibliotecas reales porque Java no tiene esta distinción entre un archivo de encabezado visible externamente y el código de objeto generado que proporciona la implementación.

Lo que normalmente hace es compilar las bibliotecas por separado, una vez, y colocar los archivos lib/dll generados más los archivos de encabezado en un lugar al que puedan acceder los proyectos que requieren la biblioteca. Una expresión común es poner los archivos de encabezado en include, las bibliotecas estáticas en lib y las bibliotecas dinámicas en los subdirectorios bin para su biblioteca compilada. El motivo por el que ha encontrado que la mayoría de las bibliotecas C++ se proporcionan en formato de código fuente y no en formato precompilado es que cada compilador C++ tiene cierta libertad sobre cómo manipular nombres de símbolos, etc. y el código objeto resultante no es portátil. a través de compiladores, y mucho menos de sistemas operativos. Así que enviar el código compilado no tiene sentido para muchas aplicaciones. Ocasionalmente lo encontrará con bibliotecas C++ de código cerrado en Windows (las bibliotecas C son un asunto completamente diferente), pero luego el proveedor tendrá que proporcionar una versión compilada para cada tipo de compilación (Release, Debug, 32 bit, 64 bit etc) y el compilador de destino (varias versiones de Visual Studio requieren binarios diferentes, luego está Borland y un montón de otros compiladores) y rápidamente se convierte en una pesadilla para soportar ...

Cuando toma una biblioteca y la compila como una biblioteca dinámica en Windows (es decir, una DLL), el compilador/enlazador normalmente generará una biblioteca de 'importación' estática para él (mismo nombre, solo con una extensión .lib) Cuando vincula su proyecto con la biblioteca dinámica, especifica el archivo .lib como una dependencia de la biblioteca. Al vincular su aplicación con dicha biblioteca de importación, el vinculador puede registrar la dependencia en el archivo .dll y también qué símbolos debe esperar que proporcione la biblioteca.

Hacerlos funcionar, en el sentido de que su programa los encuentre en Windows, generalmente requiere que el archivo .dll esté en el mismo directorio que el ejecutable o accesible mediante la variable de entorno 'PATH' y su equivalente en Visual C++ .

+0

-1 Las bibliotecas que se distribuyen como binarios vienen con una biblioteca de importación (.lib). El cambio de nombre es completamente irrelevante aquí, ya que los nombres de los símbolos se enumeran en el archivo .lib. Si esos símbolos son los nombres destrozados de un compilador (C++), los nombres de exportación de un proveedor como se enumeran en un archivo .def o los símbolos (re) nombrados asignados por el desarrollador en la línea de comando del vinculador (/ EXPORTAR) no hacen un diferencia. Los nombres de los símbolos están disponibles para cualquier vinculador. – IInspectable

+0

@IInspectable: el cambio de nombre puede ser irrelevante, pero las convenciones de llamadas y la biblioteca de tiempo de ejecución no lo son. Si no tiene cuidado al diseñar la biblioteca, puede vincular fácilmente el binario a una versión de compilación específica. –

3

Para agregar bibliotecas, esto es muy simple (si eso es lo que quiere decir) Proyecto -> propiedades -> configurar propiedades -> Enlazador -> Entrada -> bibliotecas adicionales. Vaya a una de las bibliotecas y presione enter. Ha liberado un espacio para agregar una biblioteca, eay como un pastel :)

2

Para agregar bibliotecas externas o directorios de biblioteca en un proyecto de VC++, siga estos pasos:
1- Vaya a las propiedades de su proyecto (que se puede hacer por derecho hacer clic en el proyecto en su solución)
2- Seleccione>> Directorios de biblioteca adicionales 'general' '' Linker
3- Haga clic en la barra vacía frente a 'adicional Biblioteca Directorios' y VS le permite añadir directorios a los predeterminados en los que busca las bibliotecas requeridas.

Cuestiones relacionadas