2009-07-07 25 views
5

Ho utilizzato Clint Harris' tutorial per impostare la condivisione del codice tra i progetti e tutto funziona come previsto sul mio computer. Ma sulla macchina del mio collega, sembra che il compilatore non trovi il file di intestazione dal progetto di libreria statica quando costruisce.Perché le intestazioni delle librerie statiche non vengono trovate?

Il mio collega ha ottenuto il mio progetto clonando un repository git. Abbiamo esaminato tutti i flag di compilazione rilevanti e le impostazioni XCode n volte, ma il progetto si rifiuta semplicemente di compilare sulla sua macchina.

Questo è quello che ho chiesto al mio collega di lavoro da fare, in gran parte copiato e incollato dal tutorial:

  1. Assicurarsi che ci sia spazio NO vuoto nel percorso completo elenco dei progetti.
  2. All'interno della directory dei progetti, creare un'altra cartella denominata "build_output".
  3. In XCode, in "XCode> Preferenze" selezionare la scheda "Costruzione" e impostare "Posiziona progetti di costruzione in" su "Posizione personalizzata" e specificare il percorso della directory di build comune creata.
  4. Impostare "Inserisci file di build intermedi in" su "Con prodotti di costruzione"
  5. Selezionare la scheda "Alberi di origine" e creare una nuova variabile Albero sorgente facendo clic sul pulsante "+" e compilando le colonne. In "Nome impostazione" e "Nome visualizzato", inserisci [il nome del progetto condiviso che ha creato la libreria statica]. Nel percorso, si inserisce il percorso completo nella cartella framework.

Seguendo questi passaggi, il progetto che utilizza la libreria statica dovrebbe compilare lo stesso sulla sua macchina come sulla mia. Ma non è così. Fondamentalmente, l'errore che ottiene è:

error: TheFrameworkHeader.h: No such file or directory 

e quindi una stringa di altri errori causati dall'intestazione mancante.

Qualche strategia per risolvere i problemi? O qualcuno che ha avuto un'esperienza simile e potrebbe condividere alcune conoscenze acquisite con fatica? Manca qualcosa dalle istruzioni che ho riassunto? Devo impostare i ruoli delle intestazioni nella fase di costruzione delle intestazioni di copia durante la compilazione di una libreria statica?

risposta

8

Nonostante alcuni consigli utili, non l'ho mai trovato, ma ecco alcune informazioni per chiunque si trovi in ​​una situazione simile. Ho creato la libreria e il progetto dipendente dividendo un file originale roject in due. All'inizio, la libreria e l'applicazione erano solo due obiettivi all'interno dello stesso progetto. Successivamente, ho spostato l'app in un progetto separato.Tutto sembrava funzionare, e ho spinto entrambi i progetti in repository git remoti. Quando questi sono stati clonati su altri computer, tuttavia, le intestazioni della libreria non sono state trovate.

Successivamente, scopro che si è verificato lo stesso errore quando ho clonato i progetti sul computer originale. Dopo un sacco di lotte, l'ho fissato a un dettaglio spaventoso: il nome della cartella del progetto dipendente! (vale a dire, il progetto con l'applicazione, non la libreria.) Non il nome del pacchetto .xcodeproject, non l'identificativo dell'applicazione, ma il nome della cartella contenente . Non appena lo cambio, tutto funziona. Se lo cambio al nome originale (su qualsiasi computer), di nuovo le intestazioni non vengono trovate.

Se qualcuno ha qualche idea su questo, si prega di inviare una risposta!

EDIT: Da quando ho postato questo, lo stesso problema si è verificato con un altro progetto, e ancora una volta, semplicemente rinominare la cartella che contiene la cartella .xcodeproject ha risolto il problema.

+0

Ho appena fatto succedere la stessa cosa. 'ChineseZodiac' == cattivo. 'Zodiac' == buono. WTF? –

+0

Questo fa tre di noi. Forse è il momento di presentare un bug. – Felixyz

+0

+1 per curare il mio mal di testa. – hwaxxer

0

Se si riscontrano problemi nella creazione di una particolare macchina, il problema probabilmente è un'impostazione della macchina o dell'utente. Ad esempio un environment variable (forse INCLUDE_PATH o uno dei suoi parenti - XCode utilizza GCC). Potresti avere un "." in una di queste variabili.

Il modo migliore per risolvere il problema sarebbe quello di aggiungere il percorso della cartella necessario all'interruttore -I nello script di build.

+0

Grazie, ma ho usato il pannello di generazione sulla destinazione in Xcode per impostare correttamente i "Percorsi di ricerca intestazione utente" (utilizzando il nome impostato nelle impostazioni degli alberi delle fonti nelle preferenze di Xcode), e questo è tutto ciò che ho fatto per farlo funzionare sulla mia casella di sviluppo. (Ho anche impostato "Other Linker Flags" su -ObjC.) Ora ho provato questo su un terzo computer, e l'unico su cui funziona è la scatola di sviluppo originale. – Felixyz

0

Spesso mi dimentico di controllare questo: sei sicuro che il file mancante (ad esempio, TheFrameWorkHeader.h "si trova nel repository git? Potrebbe essere che le impostazioni di compilazione siano corrette, ma il file in qualche modo non è stato aggiunto

+0

No, è controllato nel repository. – Felixyz

0

Verificare che i percorsi di ricerca "Percorsi di ricerca-> Percorsi di ricerca intestazione utente" (per tutte le configurazioni) puntino alla directory contenente il progetto Xcode condiviso (è possibile utilizzare la nuova variabile Albero sorgente creata)

+0

Mille grazie, ma avevo già controllato una dozzina di volte questo e ogni altro scenario immaginabile. Non so ancora cosa c'è che non va, ma modificherò la domanda per condividere alcune informazioni. – Felixyz

+0

Aggiunta una nuova risposta, quindi la domanda non sarà contrassegnata come senza risposta. – Felixyz

2

Non penso che sia Git, penso che sia xcode. Ho un problema molto simile qui, dove xcode/xcodebuild risolve falsamente un percorso di inclusione (rendendolo un semplice.) Con esattamente lo stesso progetto di libreria e file xcconfig (clean checkout da svn repo) ma un'altra cartella contenente - funziona. Quindi, grazie per la soluzione e non incolpare più Git ;-)

+0

No, git non è più uno dei sospettati :) Non è ancora chiaro quale sia la causa della confusione di xcode. Deve essere una sorta di meta-info nel file di progetto? – Felixyz

Problemi correlati