object library

Gast #1951422
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.
Persönliche Seite #1951471
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.
#1951491
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.
Persönliche Seite #1951496
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.
Gast #1951745
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!
#1951750
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.
#1951823
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.
Gast #1953028
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren