Ho un progetto con una dipendenza da una libreria statica di terze parti e dalle tre20 librerie. In XCode 3.X, per ottenere la compilazione del mio progetto, ho dovuto usare il flag -force_load nell'impostazione di build "Altri linker" e specificare ognuna delle tre 20 librerie che volevo includere.Perché il carico -force_load non è più necessario per le mie dipendenze da tre20 in XCode 4.2?
Durante il tentativo di creare un archivio in XCode 4.2, ricevevo un errore di "simbolo duplicato". Ho risolto questo problema rimuovendo i sette flag separati -force_load che si riferivano a ciascuna delle tre 20 librerie su cui avevo una dipendenza.
Il mio progetto ora funziona correttamente.
Mi chiedo se qualcuno può spiegare al mio perché questo cambiamento ha funzionato? C'è stato un bug che XCode 4.2 ha risolto, o è una modifica comportamentale? This post suggests c'era un bug in XCode 3.2, ma sarebbe bello se qualcuno potesse gettare ulteriore luce su questo argomento per me quindi posso essere sicuro di non aver fatto qualcosa di sbagliato rimuovendo questi flag -force_load.
Grazie!
Cool, quindi è stato sicuramente un bug, ed empiricamente sembra che sia stato corretto (anche se Apple non ha annunciato nulla ...) Grazie! – esilver
Penso che tu abbia ancora bisogno di -ObjC per caricare le categorie, e questo ti darà comunque un errore "simbolo duplicato" se lo fai, intatto hai simboli duplicati, giusto? – hooleyhoop
@hooleyhoop - Giusto, come premetto sopra hai ancora bisogno di -ObjC per le categorie, ma nella mia esperienza rimuovendo il flag linker -all_load' si elimina quasi tutti gli errori dei simboli duplicati che vedi. Se ricordo bene, molti di quei simboli provenivano da framework a cui erano collegati in più di una libreria statica, quindi entrambe le librerie statiche erano utilizzate nella stessa applicazione. Naturalmente, '-ObjC' non ti proteggerà dal caso in cui diverse categorie definiscono entrambi lo stesso nome di metodo di un'estensione della stessa classe, ma le convenzioni di denominazione appropriate dovrebbero impedirlo. –