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