Problemi di inclusione (collegamento) di una libreria statica all'interno di un'altra
-
07-07-2019 - |
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
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.