Domanda

Ho un progetto che ha bisogno di incorporare due librerie di terze parti, Liba e LIBB. Ho poco, se del caso, influire sulle librerie di terze parti. L'essere problema è che sia Liba e LIBB comprendono diverse versioni di una libreria comune, ASIHTTPRequest. Di conseguenza, sto ottenendo gli errori come:

-[ASIFormDataRequest setNumberOfTimesToRetryOnTimeout:]: unrecognized selector sent to instance 0x3b4170

, che posso solo presumo sono perché Liba si riferisce alla realizzazione di LIBB di ASIHTTPRequest (o viceversa).

Ho provato a giocare con strip -s <symbol file> -u <library> per isolare i simboli delle biblioteche gli uni dagli altri, ma che si traduce in sputare linker di XCode fuori migliaia di avvisi e in realtà non risolvere il problema principale di cui sopra.

ld: warning: can't add line info to anonymous symbol anon-func-0x0 from ...

In generale, come si può / si dovrebbe isolare le librerie gli uni dagli altri?

È stato utile?

Soluzione

Non c'è assolutamente alcun modo per farlo. Un'applicazione Objective-C può avere solo un significato per un simbolo alla volta. Se si carica due diverse versioni di una libreria l'ultimo sovrascrive il primo.

due soluzioni:

  1. convincere lo sviluppatore di utilizzare una versione recente
  2. Esegui entrambe le librerie in processi separati

Altri suggerimenti

Se hanno usato lo stesso nome del simbolo linker per diverse routine, l'unica via d'uscita (a corto di hacker loro file oggetto), è quello di collegarli in diversi eseguibili in qualche modo.

Su piattaforme che il sostegno dinamico di collegamento (ad esempio: DLL) si potrebbe costruire uno o entrambi in una DLL separata. Se non sono parte della esportato dell'interfaccia i simboli non dovrebbero partita poi.

In caso contrario, si sarebbe bloccato la loro messa in processi completamente separati e utilizzando IPC a passare i dati tra di loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top