2009-06-30 14 views
6

Come ho già detto in una domanda precedente, sto pianificando il porting di un progetto Qt da VC++ a QtCreator.Progetto QtCreator con più librerie e un exe

Il progetto è costituito da 4 sottoprogetti: 3 di questi sono lib e l'ultimo esegue l'exe. I sottoprogetti sono stratificati, vale a dire che ogni livello ha dipendenze del tempo di compilazione e collegamento agli strati sottostanti.

I file sono organizzati come segue:

root 
    lib1 
    lib2 
    lib3 
    main 

ho creato ciascuno dei sottoprogetti in QtCreator da zero. Ogni cartella contiene un file pro con lo stesso nome (ad es. Lib1 -> lib1.pro). Usando questo approccio ho costruito tutti i progetti tranne l'ultimo che deve collegare l'eseguibile. Mi è stato sempre errori del linker che ho fissato modificando manualmente il file di pro e aggiungendo il codice qui sotto:

LIBS += ../path/lib1.a \ 
    ../path/lib2.a \ 
    ../path/lib3.a 

Tutto va bene, solo che adesso lib3 lamenta che non riesce a trovare i simboli dal lib2 e lib1. Aggiungi LIBS al file lib2.pro non funziona.

Ho la sensazione che non riesca a capire come funziona QtCreator con libs ed eseguibili. Come organizzeresti un tale progetto in modo che compili e collegamenti correttamente?

risposta

4

Dopo aver lavorato ulteriormente sul problema, ho ricordato che per la catena di strumenti GCC l'ordine dei parametri del linker è importante.

L'inversione delle voci di LIBS ha fatto il trucco.

3

Felice di vedere la risposta. Si può anche aggiungere:

CONFIG += ordered 

per le directory radice del file .pro (è valida solo nel profilo 'SUBDIRS'). Costringe qmake a generare Makefile che conserva l'ordine in cui li hai elencati in tutte le circostanze.

+0

Sì, ho trovato questa opzione nei documenti e la sto usando al momento. La parte buona è che posso caricare tutto il mio progetto in una volta, la parte cattiva è che non riesco a costruire ogni lib singolarmente. :-) – rpg

Problemi correlati