Forum: PC-Programmierung ar mit -fPIC compilierten Objektdateien?


von Günter -. (guenter)


Lesenswert?

Hallo,

ich möchte von C Sourcecode eine dynamischen und eine statische 
Bibliothek erzeugen. Für die dynamische Bibliothek muss ich den 
Sourcecode mit der gcc-Option -fPIC compilieren. Meine Frage ist nun, 
kann ich denn die so erzeugten Objektdateien auch nutzen um mit ar eine 
statische Bibliothek daraus zu kreieren oder muss ich den Sourcecode 
nochmal ohne -fPIC compilieren um dann die statische Bibliothek zu 
erzeugen?

Danke für die Hilfe.

Gruß,

Günter

von Hermann-Josef (Gast)


Lesenswert?

Hallo,

das hängt von der Platform und von der Compiler-Version ab. Bei gcc 
2.95.x auf i586 ging es, ich würde es aber nicht empfehlen.
Bei gcc 3.3.x und i586 scheint es auch noch zu gehen, x86_64 ist da 
schon anspruchsvoller.

Üblicherweise sollten die mit -fPIC kompilierten Objektdateien in eine 
Shared Library (*.so) reinkommen, dazu müssen dann ld und libtool 
'angeworfen' werden. Die von mir verwendeten Build-Systeme scons und 
autotools machen das automatisch richtig.

Gruß
Hermann-Josef

von Günter -. (guenter)


Lesenswert?

Danke für die Information. Das bedeutet dann, wenn ich zwei Ziele habe, 
einmal die statische und einmal die dynamische Bibliothek, das ich zwei 
mal den Objektcode erzeugen muss. Wahrscheinlich am besten dann in extra 
Ordner damit das mit den Abhängigkeiten funktioniert. Ansonsten ist ja 
der Objektcode schon auf den neusten Stand für die dynamische Bibliothek 
und wird nicht noch mal compiliert für die statische Bibliothek.

von Hermann-Josef (Gast)


Lesenswert?

Hallo,

ja das ist richtig. Scons nennt die 'shared' Objekt-Files *.os, die GNU 
autotools erzeugen jeweils ein *.o und ein *.lo

Vielleicht ist dies bei einem 'simplen' Makefile durch Pattern-Regeln 
oder Suffix-Regeln hinzubekommen:
1
%.o: %.cpp
2
        $(CXX) $(CXXFLAGS) -c $< $(INCLUDES) $(DEFINES) -o $@
3
%.os: %.cpp
4
        $(CXX) $(CXXFLAGS) -fPIC -c $< $(INCLUDES) $(DEFINES) -o $@

... genaue Syntax ohne Gewähr, habe das schon länger nicht mehr gemacht.

Gruß
Hermann-Josef

von Günter -. (guenter)


Lesenswert?

Danke, das ist eine gute Idee.

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.