2012-08-27 9 views
7

Ho un po 'di dilemma. Ho aggiunto 2 framework nel mio progetto e così succede che entrambi usano JSONKit. Quindi quando compilo il mio progetto ottengo simboli duplicati tra questi 2 framework.Come evitare i simboli duplicati tra i quadri di terze parti

Ho dovuto aggiungere -ObjC -all_load nelle mie impostazioni di compilazione altrimenti otterrei errori di runtime (arresti anomali) a causa di alcune categorie non compilate.

Qualche idea?

+1

Se si ottiene il codice sorgente, è sufficiente modificarlo in modo da includere JSONKit e rimuoverlo dalle origini framework. Se si stanno ottenendo solo librerie statiche, scrivere ai manutentori e dire loro di creare un collegamento debole con JSONKit e renderlo un requisito per l'utilizzo del loro framework (questo è ciò che dovrebbero fare comunque). –

+1

Sì, questo è un grosso problema. Ho visto librerie che mancano di proposito altre terze parti richieste perché sanno che si scontreranno. Se si sta utilizzando -ObjC -all_load, presumo che si stiano utilizzando file .a effettivi. Forse puoi richiedere agli sceneggiatori una versione senza quella libreria. – rooster117

+0

Sì, temevo che questa sarebbe stata la risoluzione. Vorrei che fosse più facile evitare questo insieme di problemi. – MrShoot

risposta

2

Quando si collega la libreria statica, il linker incorpora tutti i simboli nel binario finale. (questo è il motivo per cui è denominato statico.) In realtà non esiste un modo valido per rimuovere simboli specifici, perché non c'è differenza tra i simboli sorgente e i simboli appena incorporati. Anche tu puoi rimuovere simboli duplicati, nessuno può essere sicuro che i simboli duplicati siano la stessa versione. Se una libreria utilizzava la versione modificata della libreria JSONKit, questa verrà interrotta quando la si sostituisce con un'altra versione.

L'unico modo è ottenere il file .a senza i simboli duplicati o ottenere il codice sorgente e compilarli da soli. Se i creatori di lib non sono idioti, dovrebbero offrire qualche versione della biblioteca senza simboli incorporati. Se non esiste una cosa del genere, raccomando vivamente di non usare quella lib. Perché non ha alcun interesse per il conflitto di simboli, il che significa che è fatto da principianti, il che significa che è pieno di problemi.

Problemi correlati