mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik object library


Autor: noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich bau gerade eine object library aus mehreren c dateien und wollte 
wissen wie ich funktionen innerhal der lib schreiben kann ohne das sie 
fon aussen zugreifbar sind.
static funktionen sind ja nur innerhab der c datei sichtbar gibt es da 
etwas?

Bsp.
Datei datei1.c enthält funcA und funcB die nur in datei2.c in der 
funktion funcD und funcE aufgerufen werden können.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas geht nicht. Wenn modulübergreifende Funktionen verwendet werden, 
werden sie exportiert, und dann sind sie logischerweise auch verwendbar.

Eine Library ist nur eine Sammlung von aus einzelnen C-Source-Files 
erzeugten Objektdateien, die Auflösung von externen Funktionsaufrufen 
übernimmt erst der Linker bei Gebrauch der Library. Und das betrifft 
auch Funktionsaufrufe zwischen mehreren in der Library enthaltenen 
Modulen.


Im übrigen solltest Du Deine Beiträge vor dem Absenden nochmal 
durchlesen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dynamischen Libs kann man die exportierten Symbole
steuern über eine Kombination von Funktionsattributen und
ld-Optionen (zumindest auf einem GNU-System auf einem PC).
Das habe ich unter Linux irgendwann mal gemacht, ist aber
schon lange her und ich weiß nicht mehr recht, wo das war.

Bei statischen Libs kann man evtl. die Symboltabelle
von ar abgreifen und manuell editieren, das habe ich aber
nie probiert.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine dynamische Library ist vom Aufbau her etwas komplett anderes als 
eine herkömmliche statische Library, da hier das "Linken" vom 
Programmlader des Betriebssystem durchgeführt wird. Libraryinterne 
Referenzen sind bereits aufgelöst; die Library lässt sich auch nicht 
mehr in die Objektdateien zerlegen, die bei ihrer Erzeugung verwendet 
wurden.

Das aber geht bei einer statischen Library; bei ar ist die dafür 
zuständige Option -x.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber es geht doch nicht um das Zerlegen einer Lib,
sondern nur darum, wie man einzelne Funktionen
exportiert oder eben nicht; wenn ich das richtig
verstanden habe (wobei die Frage in der Tat
anstrengend zu lesen ist).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gewiss, nur wenn es möglich ist, die Library zu zerlegen, dann sind auch 
die Symboltabellen der Objektdateien rekonstruierbar. Und damit ist der 
vom Threadstarter vermutlich erwünschte "Schutz" nicht erreichbar.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach so, jetzt verstehe ich es auch.
Kann ich aber nicht viel dazu sagen; müsste man mal sich
über ar schlauer machen - falls es hier um statische geht.

Autor: noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
danke erst einmal für die Vielen Antworten und Bemühungen.
Also nocheinmal ich würd gern eine Library bauen die nur bestimmte 
funktionen dem Anwender freigibt. Die Lib soll also noch funktionen 
besitzen welche vom Anwender nicht Aufgerufen werden können.
Ich hoffe das es jetzt verständlicher ist.
Vielen Dank!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So habe ich das am Anfang verstanden (auch wenn es jetzt besser
lesbar ist :-).

Aber mehr Information steht irgendwie auch nicht drin,
also kann ich auch nicht mehr dazu sagen.

Nochmal die Aussage von Rufus wiederholt:
Es geht nicht, zumindest nicht mit Standard-C-Mitteln
(außer natürlich alle Funktionen in einen Quelltext zu packen,
und die zu versteckenden mit static zu garnieren).

Evtl. kann man über den Linker mehr machen.
Dazu müsstest du dir klar werden, welchen Linker du benutzst
und ob du dynamischer oder statische Bibliotheken hast,
und dich dann entsprechend durch die Doku des Linkers quälen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein ganz anderer Ansatz wäre übrigens, C++ zu verwenden, falls es
sich vom Problem her anbietet.
Da kann man mit private, public, protected und friend viel
machen.

Autor: noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke nochmals.
ich dachte es gäbe da eine etwas einfachere lösung.
Ich meine wie machen das die Firmen wenn die mal ne lib freigeben?
die sind dann ungeschützt oder wie?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ja kaum jemand nur eine statische Lib frei (bei
dynamischen sieht es ja etwas anders aus), und wenn doch:
wen stören denn ein paar Symbole mehr?

Schau dir mal mit dumpbin eine der Standard-Libs von Microsoft
an.
Das ist wie das Telefonbuch von Berlin: viele Namen, wenig Handlung.

Autor: ein selbst programmierender Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum gibst du deinen Anwendern zum Einbinden nicht einfach ein 
Headerfile in welchem nur die "erlaubten" Funktionen aus deiner lib 
enthalten sind ?

Autor: noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Es gibt ja kaum jemand nur eine statische Lib frei (bei
> dynamischen sieht es ja etwas anders aus), und wenn doch:
> wen stören denn ein paar Symbole mehr?

Wie macht man es denn sonst wenn man Anwendern funktionalitäten geben 
möchte warauf sie aufbauen können ohne das sie die sourcen gleich 
mitbekommen?



ein selbst programmierender Gast schrieb:
> Warum gibst du deinen Anwendern zum Einbinden nicht einfach ein
> Headerfile in welchem nur die "erlaubten" Funktionen aus deiner lib
> enthalten sind ?

ich weiß man sollte eine hearder datei mit den erlaubten funktionen 
bereitstellen ich dachte halt nur das es sicherer wäre wenn man die 
funkionen von draußen nicht Aufrufen kann.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.