Domanda

Proverò a spiegare a breve cosa voglio fare:

Un progetto che utilizza una libreria statica che ne ha un'altra come depandency. Produce un progetto chiamato MyProject che collega su MyLib1 che collega su MyLib2. Ecco l'ordine di compilazione:

  • MyLib2
  • MyLib1 (collegamento a MyLib2)
  • MyProject (collegamento a MyLib1)

Sto usando Visual Studio 2008 e ho qualche problema a definire include. Durante il collegamento, utilizzo la proprietà " Directory di inclusione aggiuntiva " (sul nodo C / C ++ della proprietà del progetto). Questo sembra funzionare tra MyProject e MyLib1 ma non MyLib1 e MyLib2. Per esempio: ho un file in MyLib2 chiamato foo.cpp; Utilizzo di #include " foo.cpp " rende Visual Studio dicendo che foo.cpp è sconosciuto (file o cartella mancante).

Per assicurarmi che NON sia stato un percorso sbagliato, ho fatto molti tentativi come il seguente: copia-incolla il percorso mostrato nella riga di comando (usato per compilare la libreria) in win explorer: vedo bene il codice sorgente del mio seconda biblioteca. Ho rifatto il progetto molte volte e ogni volta ho usato nomi diversi (costringendomi a prestare attenzione a questo) e tutto sembra ben definito (ma non " incluso ").

L'unico modo in cui trovo davvero che funzioni: usare #include " c: \\ foo.cpp " come include ... Molto bello per la portabilità!

Ecco un Zip of the Solution per testarlo tu stesso e dimmi cosa c'è che non va: MyProject.rar

Grazie per aver dedicato del tempo ad aiutarmi! Lucyberad

È stato utile?

Soluzione

Innanzitutto, non includere mai i file * .cpp.

In secondo luogo, utilizzare la dichiarazione diretta delle funzioni esterne:

void appellib2(void);

void appellib1(void)
{
    appellib2();
}

Terzo, fai clic con il pulsante destro del mouse su ciascun progetto in Esplora soluzioni e seleziona " Dipendenze progetto ... " e imposta le dipendenze appropriate: MyProject - > MyLib1 - > MyLib2.

Alla fine, nelle proprietà di MyProject, imposta dipendenze aggiuntive MyLib1.lib.

Ora posso costruire ed eseguire il tuo progetto senza errori.

Aggiorna

Non rinominare mai * .cpp in * .h solo per risolvere i problemi di collegamento. Se hai una definizione nel tuo file * .h, non potrai includerla due o più volte.

Ecco il tuo progetto YourProject.rar .

Altri suggerimenti

Ho cambiato .cpp in .h. So che non ho mai incluso un file CPP ma era a scopo di test.

Ho aggiunto il prototipo di ciascuna funzione ma non funziona meglio (non include il file mylib2.cpp, il prototipo è migliore ma non utile in questo test).

Ho impostato le dipendenze del progetto. Non riesce ancora.

Ho impostato dipendenze aggiuntive da MyLib1.lib a MyProject (penso che questo sia stato il prossimo errore che sarei in grado di trovare, producendo un collegamento a un errore).

Con queste modifiche, ho ancora incluso l'errore mylib2.h: nessun file o directory.

Ecco il nuovo archivio: MyProject.rar

Se riesci a farlo funzionare, puoi farmi un archivio della soluzione funzionante?

Grazie, Lucyberad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top