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.
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.
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.
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.
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).
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.
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.
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!
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.
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.
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?
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.
Warum gibst du deinen Anwendern zum Einbinden nicht einfach ein Headerfile in welchem nur die "erlaubten" Funktionen aus deiner lib enthalten sind ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.