Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 22. Nov 2018 11:23

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 21. Feb 2011 7:35 
Offline

Registriert: 25. Mär 2008 12:50
Beiträge: 127
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 :-(

_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 21. Feb 2011 12:02 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 22. Feb 2011 10:01 
Offline

Registriert: 25. Mär 2008 12:50
Beiträge: 127
libtool klingt nach einer coolen Lösung - Danke!

_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 14. Mär 2011 9:22 
Offline

Registriert: 25. Mär 2008 12:50
Beiträge: 127
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!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Mär 2011 19:31 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de