Pregunta

Trataré de explicar en breve lo que quiero hacer:

Un proyecto que usa una biblioteca estática que tiene otra como depandency. Produce un proyecto llamado enlace MyProject en enlace MyLib1 en enlace MyLib2. Aquí está el orden de compilación:

  • MyLib2
  • MyLib1 (enlace a MyLib2)
  • MyProject (enlace a MyLib1)

Estoy usando Visual Studio 2008 y tengo algunos problemas para definir incluir. Al vincular, uso la propiedad "Incluir directorio adicional" (en la propiedad del proyecto C / C ++ nodo). Esto parece funcionar entre MyProject y MyLib1 pero no MyLib1 y MyLib2. Por ejemplo: tengo un archivo en MyLib2 llamado foo.cpp; Usando #include " foo.cpp " hace que Visual Studio diga que foo.cpp es desconocido (falta archivo o carpeta).

Para asegurarme de que NO es una ruta incorrecta que di, he realizado muchos intentos como los siguientes: copiar y pegar la ruta que se muestra en la línea de comandos (utilizada para compilar la biblioteca) en el explorador de win: veo bien el código fuente de mi segunda biblioteca He rehacido el proyecto muchas veces y cada vez que uso diferentes nombres (lo que me obliga a prestar atención a esto) y todo parece estar bien definido (pero no "incluyendo").

La única forma en que realmente encuentro que funciona: usando #include " c: \\ foo.cpp " como include ... ¡Muy agradable para la portabilidad!

Aquí hay un Zip de la solución para probarlo usted mismo y decirme qué sucede: MyProject.rar

¡Gracias por tomarse un tiempo para ayudarme! Lucyberad

¿Fue útil?

Solución

Primero, nunca incluya archivos * .cpp.

Segundo, use la declaración directa de sus funciones externas:

void appellib2(void);

void appellib1(void)
{
    appellib2();
}

Tercero, haga clic con el botón derecho en cada proyecto en el Explorador de soluciones y seleccione "Dependencias del proyecto ..." y configurar dependencias adecuadas: MyProject - > MyLib1 - > MyLib2.

Por último, en las propiedades de MyProject, configure dependencias adicionales MyLib1.lib.

Ahora puedo construir y ejecutar su proyecto sin errores.

UPDATE

Nunca cambie el nombre de * .cpp a * .h solo para resolver problemas de vinculación. Si tiene una definición en su archivo * .h, no podrá incluirla dos veces o más.

Aquí está su proyecto YourProject.rar .

Otros consejos

He cambiado .cpp a .h. Sé que nunca debo incluir un archivo CPP pero fue con fines de prueba.

He agregado un prototipo de cada función pero no funciona mejor (no incluye el archivo mylib2.cpp, el prototipo es mejor pero no útil en esta prueba).

He configurado dependencias del proyecto. Todavía falla.

He configurado dependencias adicionales MyLib1.lib a MyProject (creo que este fue el siguiente error que podría encontrar, produciendo un error de enlace).

Con estas modificaciones, todavía recibo el error mylib2.h: no existe tal archivo o directorio.

Aquí está el nuevo archivo: MyProject.rar

Si llega para que funcione, ¿puede hacerme un archivo de la solución de trabajo?

Gracias Lucyberad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top