Question

J'ai un projet qui doit intégrer deux bibliothèques tierces, Liba et Libb. J'ai peu, le cas échéant, une influence sur les bibliothèques tierces. L'être problème est que les deux Liba et Libb comprennent différentes versions d'une bibliothèque commune, ASIHTTPRequest. En conséquence, je reçois des erreurs comme:

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

, que je ne peux que supposer que sont Liba fait référence à la mise en œuvre de Libb de ASIHTTPRequest (ou l'inverse).

J'ai essayé de jouer avec strip -s <symbol file> -u <library> pour isoler les symboles des bibliothèques de l'autre, mais que les résultats dans le crachement éditeur de liens de XCode des milliers d'avertissements et ne résout pas réellement le principal problème décrit ci-dessus.

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

En général, comment peut / doit-on isoler les uns des autres bibliothèques?

Était-ce utile?

La solution

Il n'y a absolument aucun moyen de le faire. Une application Objective-C ne peut avoir qu'une seule signification pour un symbole à la fois. Si vous chargez deux versions différentes d'une bibliothèque le dernier remplacera le premier.

Deux solutions de contournement:

  1. convaincre le développeur d'utiliser une version plus récente
  2. exécuter les deux bibliothèques dans des processus distincts

Autres conseils

S'ils ont utilisé le même nom de symbole de linker pour différentes routines, la seule issue (à court de piratage de leurs fichiers d'objets), est de les relier en différents executables en quelque sorte.

Sur les plates-formes de liaison dynamique de soutien (par exemple: DLL), vous pouvez construire un ou les deux dans une DLL séparée. Si elles ne font pas partie de l'interface, les symboles exportés ne doivent pas alors ce match.

Sinon, vous seriez coincé de les mettre dans les processus entièrement séparés et en utilisant IPC pour transmettre des données entre eux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top