Ich habe zwei Bibliotheken von Drittanbietern, die gelegentlich den gleichen Symbolnamen exportiert haben. Wenn die ausführbare Datei geladen wird, wählt normalerweise ld die falsche aus und ich stürze als Ergebnis. Ich kann nicht viel über den Inhalt dieser Bibliotheken tun, so kann es eine Möglichkeit geben, ld wie man die richtige Implementation zu finden?Symbol (e) im freigegebenen Objekt von LD ausblenden
OS - Solaris 10, mein Programm ist von autoconf/autotools/gcc gebaut, widersprüchliche Bibliotheken sind libclntsh (Teil des Oracle-Treibers) und OpenLDAP. Leider kann ich die Implementierung des LDAP-Clients von Oracle nicht verwenden - es fehlen viele Funktionen, die OpenLDAP bietet.
Edited: Das Gestänge ist wie folgt: libclntsh.so-> A.so-> MAIN < -B.so < -libldap_r.so
Hallo Dmitry. Sehen Sie sich [meine Frage] an (http://stackoverflow.com/questions/9909528/how-can-i-remove-a-symbol-from-a-shared-object). Anscheinend können Sie ['objcopy -N foo'] (http://linux.about.com/library/cmd/blcmdl1_objcopy.htm) verwenden, um die Symbole eines gemeinsamen Objekts zu löschen. –