Kollisionen von gemeinsam genutzten Bibliotheksnamen

8

Ich verteile eine gemeinsam genutzte Bibliothek (C ++) und ein Python-Modul, das diese Bibliothek verwendet. Ich baue eine modifizierte Version der Bullet Physics Library (als CMake Subprojekt). Ich verwende nur Bullet-Klassen und Funktionen in einer Datei - bullet_interface.cpp - und alle Bullet-Sachen sind in "namespace {...}" versteckt.

Das Problem besteht darin, dass einige andere Bibliotheken Bullet als Systemabhängigkeit und Link zur Systemversion von Bullet benötigen. In der Tat exportiert eine der Abhängigkeiten meiner Bibliothek (libopenrave) Bullet-Symbole. (Genauer gesagt lädt es manchmal dynamisch ein Plugin, das Bullet-Symbole exportiert).

Ich frage mich, ob es eine Möglichkeit gibt, meine Bibliothek so zu erstellen, dass bullet_interface.cpp die korrekten Bullet-Funktionen verwendet, aber dann macht meine Bibliothek keines der Bullet-Symbole sichtbar. Ich kann das System-Bullet nicht verwenden, weil ich Änderungen am Quellcode vornehmen musste. Eine hacky Lösung wäre, alle Bullet-Funktionen und -Klassen durch Suchen und Ersetzen umzubenennen (fast alle enthalten die Zeichenfolge "bt"). Gibt es einen besseren Weg?

    
John 11.02.2013, 21:06
quelle

1 Antwort

2

Dies ist ein bisschen umständlich, um das zu erreichen, was Sie wollen, aber es ist besser als Suchen und Ersetzen im Bullet-Code.

Sie können versuchen, Symbole in der Aufzählungsbibliothek mit dem Dienstprogramm objcopy wie folgt voranzustellen:

%Vor%

Dies sollte auch mit einer dynamischen Bibliothek funktionieren, aber Sie müssen es versuchen. Einzelheiten finden Sie diese Antwort .

    
George Skoptsov 26.02.2013 20:12
quelle