www.mikrocontroller.net

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


Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hermann-Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hermann-Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
%.o: %.cpp
        $(CXX) $(CXXFLAGS) -c $< $(INCLUDES) $(DEFINES) -o $@
%.os: %.cpp
        $(CXX) $(CXXFLAGS) -fPIC -c $< $(INCLUDES) $(DEFINES) -o $@

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

Gruß
Hermann-Josef

Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das ist eine gute Idee.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.