2012-04-05 16 views
4

Ziehen Sie Ihre c + + Ninja Voodoo Handschuhe an.Eine kompilierte statische Bibliothek ändern

Wir haben eine Bibliothek von Drittanbietern für die Verwendung in unserer iOS-App erworben. Es gibt 2 Versionen dieser Bibliothek, also nennen wir sie bull_frog_noises.a und toad_frog_noises.a.

Das Unternehmen nie gedacht, dass jemand beiden Frösche Geräusche in ein einzelnen App, so dass jede Bibliothek bietet die gleiche Methodennamen machen möchte:

MAKE_FROG_NOISE(); 

Gibt es eine Möglichkeit zu diese Bibliotheken neu erstellen oder ändern, so dass sie beide verwendet werden können, ohne miteinander zu kollidieren? Hier ist der ideale Zustand:

MAKE_BULL_FROG_NOISE(); 
MAKE_TOAD_FROG_NOISE(); 
+4

Sie können eine Bibliothek in ios nicht dynamisch laden. Sie werden zusammen mit der App erstellt, sodass Sie der App keine weiteren Funktionen geben können, ohne den Apple-Genehmigungsprozess durchlaufen zu müssen. –

+0

Danke, Raphael - Ich möchte nicht, dass die Leute zu sehr in die dynamische Ladeidee eingreifen, also habe ich diesen Teil der Frage entfernt. – bendytree

Antwort

4

Ich würde versuchen, einen Hexeditor zu verwenden, um eine dieser Bibliotheken manuell zu ändern, so dass jede Instanz von MAKE_FROG_NOISE durch MAKE_TOAD_NOISE ersetzt wurde. Du müsstest extrem vorsichtig sein, um nur diese eine Veränderung zu machen. Sie können nur Bytes ersetzen. Fügen Sie nichts ein oder löschen Sie nichts. Und ändern Sie nichts anderes in der Datei.

+0

Das hat funktioniert, aber es ist schwierig. Sie müssen die Methoden, die Sie verwenden, und die verwendeten privaten Methoden umbenennen, wenn sie miteinander kollidieren. Wie auch immer, ich habe Hex Hexer benutzt, um einen Buchstaben jeder Methode umzubenennen und jetzt kann ich sie nebeneinander laufen lassen. – bendytree

3

Sie können eine andere statische Bibliothek als Wrapper bauen auf diese Bibliotheken mit den Methodennamen, die Sie wollen, und dann sind die Wrapper-Bibliotheken in das Projekt.

wie folgt aus:

1 - Erstellen Sie eine neue statische Bibliothek Projekt mit dem Namen bull_frog_noises_wrapper.a.

2 - Schließen Sie bull_frog_noises.a als eine Abhängigkeit zu dieser neu erstellten Bibliothek ein.

3 - Erstellen Sie Methoden wie folgt aus:

void MAKE_BULL_FROG_NOISE() 
{ 
    MAKE_FROG_NOISE(); 
} 

4 - Machen Sie dasselbe für die toad_frog_noises.a, Erstellen von Methoden wie:

void MAKE_TOAD_FROG_NOISE() 
{ 
    MAKE_FROG_NOISE(); 
} 

5 - diese Wrapper in Ihrem Projekt hinzufügen und Sie sind fertig.

Seien Sie vorsichtig mit den Headerdateien, die Sie im Hauptprojekt verwenden, damit sie nicht mit den inneren Bibliotheken in Konflikt stehen.

Ich hoffe, es hilft.

+0

Würde das verhindern, dass sich die interne Bibliothek gegenseitig zertrampelt? Was passiert zum Beispiel, wenn beide 'MAKE_FROG_NOISE()' Methoden Methoden wie 'PREPARE_NOISE()' aufrufen? Würden die richtigen Methoden aufgerufen werden? – bendytree

+1

Dies löst das Problem nicht, da immer noch alles miteinander verbunden werden muss, und dort wird die Kollision stattfinden. –

+1

Deshalb habe ich gesagt, 2 getrennte Bibliotheken zu erstellen. Jede Bibliothek wird unabhängig gebaut. Die Datei toad_frog_noises.a enthält eine Reihe von Kopfzeilen, die nur in toad_frog_noises_wrapper.a enthalten sind, und die andere Bibliothek wird das gleiche tun. Der Link-Teil der Methoden findet in der Wrapper-Bibliothek statt, nicht im Projekt selbst. –

Verwandte Themen