Forum: Mikrocontroller und Digitale Elektronik object library


von noob (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Klaus W. (mfgkw)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Klaus W. (mfgkw)


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).

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Klaus W. (mfgkw)


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.

von noob (Gast)


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!

von Klaus W. (mfgkw)


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.

von Klaus W. (mfgkw)


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.

von noob (Gast)


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?

von Klaus W. (mfgkw)


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.

von ein selbst programmierender Gast (Gast)


Lesenswert?

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

von noob (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.