Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Shared Library: Exportierte Symbole begrenzen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 21. Feb 2011 7:35   Titel: Shared Library: Exportierte Symbole begrenzen

Hi,

ich habe hier ein Problem mit einer Shared Library (.so).

Diese nutzt intern (aber in einem separaten Modul, so dass ich "static" nicht als lösung verwenden kann) verschiedene Symbole. Diese Symbole sind für die Schnittstelle komplett uninteressant, werden aber dennoch nach außen sichtbar, da sie ja beim Linken der Lib benötigt werden.

Leider kollidieren genau diese Symbole jetzt mit anderen Symbolen, welche in dem Programm benutzt werden, das diese Lib verwendet.

Wie kann ich das verhindern? Gibt es z.B. irgend welche Statements, mit denen ich verhindern kann, dass die Lib diese Symbole exportiert, obwohl die nach außen hin gar nicht benötigt werden?

Ach ja, umbenennen ist leider keine Option Sad
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 21. Feb 2011 12:02   Titel:

Schau dir das hier genauer an: http://people.redhat.com/~drepper/, Kapitel 2.2
Im Prinzip läuft es auf
Code:

int libfunc(int) __attribute__ ((visibility ("hidden")));

hinaus.

Alternativ kannst du auch libtool benutzen und die unnötigen Symbole nachträglich mit der Option "-export-symbols" rauswerfen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 22. Feb 2011 10:01   Titel:

libtool klingt nach einer coolen Lösung - Danke!
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 14. März 2011 9:22   Titel:

So, scheinbar stelle ich mich zu doof an...

Bisher habe ich in meinem Makefile mit folgendem Statement die Library erzeugt:

Code:
g++ -shared   -o ../libmylib.so libmylib.o -pthread -ldl


Das hat problemlos geklappt und mit eine libmylib.so erzeugt. Das ganze mit libtools sieht so aus:

Code:
libtool --mode=link g++ -shared   -o ../libmylib.so libmylib.o -pthread -ldl -export-symbols-regex mylib_


Allerdings will er mir jetzt keine Shared Library mehr bauen sondern ein executable, der Linker beschwert sich über eine fehlende main(). Was geht denn da schief?
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 16. März 2011 19:31   Titel:

Libtool erkennt am Namen des Ziels, ob es eine Shared Library werden soll. Diese müssen libXXXXX.so heißen. Alternativ kannst du den Schalter "-module" benutzen, der hat allerdings noch ein paar Nebenwirkungen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy