ar mit -fPIC compilierten Objektdateien?

#1068899
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
Gast #1068978
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
#1072117
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.
Gast #1073225
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

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