GCC zu viele Quelldateien

Gast
Schau dir die @-Option an.

Aber "jemand" hat schon recht: wenn die Kommandozeile so lang wird, dass 
sie das System nicht mehr will (bei mir wären das ca 2MB), sollte man 
auf Make o.ä. wechseln.
Gast
Lothar schrieb:
> weil scheinbar der Argument-String nicht beliebig lang sein darf. Wie
> kann man es sonst machen? Mit einem Linker-Skript?

Und dir sind dabei nie absurd lange Kompilier-Zeiten aufgefallen?
Also ich meine, du hast dich nie gewundert, dass du bei jeder winzigen 
Änderung in einer Quelldatei wieder recht lange kompilierst?
Gast
Sven P. schrieb:
> Und dir sind dabei nie absurd lange Kompilier-Zeiten aufgefallen?

Das sind bei Windows nur 2 oder 8 tausend Zeichen, also je nach Pfaden 
und Optionen nur ein paar Dutzend quell-Dateien. Das fällt einem 
Anfänger nicht wirklich auf. Zumal dann jede Datei nur 10 Funktionen a 
10 Zeilen hat.
Persönliche Seite
Lothar schrieb:
> Ich möchte ein grosses Projekt mit vielen Quelldateien kompilieren. Das
> geht nicht mit:
>
> g++ file1.cc file2.cc file3.cc ...
>
> weil scheinbar der Argument-String nicht beliebig lang sein darf.

Genau, denn du verwendest offenbar MS Windows.

> Wie kann man es sonst machen?

Linux verwenden oder mit @-Datei versuchen, in welche du die 
Kommandozeilenargumente schreibst.

http://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html

Das hilft aber nur bis dahin, wo der Compiler(treiber) wieder eine 
Kommandozeile für nen Subprozess zusammenbastelt, etwa für den Linker: 
Der muss ja alle Object-Dateien bekommen.

Wenn GCC mit einem @-File aufgerufen wurde, dann erstellt er auch ein 
@-File, um die Argumente an den Linker zu übergeben — falls der 
GNU-Linker verwendet wird und GCC dies beim configure bekannt ist: 
configure ... --with-gnu-ld ...

Oder eine statische Lib erstellen, die die Module enthält, und gegen 
diese linken.


 Mit einem Linker-Skript?
Gast
Johann L. schrieb:
> du verwendest offenbar MS Windows

Nein ist auf Pi mit RISC OS. Inzwischen habe ich aber eine "Lösung" ...

Alles ausser main.cc unter Linux mit GCC Cross-Compiler für ARM in eine 
statische Library packen und auf Pi mit RISC OS dann nur noch:

g++ lib.a main.cc

> Kommandozeile für nen Subprozess zusammenbastelt

Das war wohl genau das Problem.

Sven P. schrieb:
> absurd lange Kompilier-Zeiten

Der RISC OS Port vom GCC ist schon bei einer Quelldatei lahm und wird 
dann nicht mehr viel lahmer. Es soll aber Abhilfe in Arbeit sein :-)

http://riscosblog.huber-net.de/2019/10/erste-anzeichen-fuer-gcc-8-2-0/
Beitrag #6032399 wurde von einem Moderator gelöscht.
Lothar schrieb:
> Wie kann man es sonst machen?

Mir getrennten Aufrufen... so wie jedes gebrauchbare Build-System auch.

Lothar schrieb:
> g++ file1.cc file2.cc file3.cc ...
1
g++ -c -o file1.o file1.cc
2
g++ -c -o file2.o file2.cc
3
...
4
g++ -o prog file1.o file2.o ...

Die letzte Zeile dürfte bei vielen Dateien auch ein bisschen kürzer sein 
als dein Ausgangsbeispiel.

Unter aktuellen Betriebssystemen sind die Grenzen aber hinreichend groß, 
dass man sich meist nicht mit Parameterdateien behelfen muss (bei DOS 
lag die Grenze bei 127 Bytes über alles, da waren @-Dateien spätestens 
beim Linken normal).
Gast
Heiko L. schrieb:
> S. R. schrieb:
>> Mir getrennten Aufrufen... so wie jedes gebrauchbare Build-System auch.
>
> Problem dürfte da aber bleiben, dass auch die Linker-Zeile viel zu lang
> werden wird.

Dann Linkt man in mehreren Schritten, so wie jedes brauchbare 
Buildsystem es kann. Hilft auch mit der Parallelisierung.
mh schrieb:
> Johann L. schrieb:
>> Oder eine statische Lib erstellen, die die Module enthält, und gegen
>> diese linken.
>
> Hat man dabei nicht evtl. das gleiche Problem?

Man muss ja nicht das gesamte Programm in eine einzige Lib stecken. Eine 
statische Lib ist nicht mehr als ein Archiv, das mehrere Object-Files 
enthält. Ich packe also zusammengehörende Object-Files in ein Archiv und 
muss sie dann nachher dem Linker nicht mehr alle einzeln angeben, 
sondern einfach das komplette Archiv auf einmal.
Gast
> Nein ist auf Pi mit RISC OS. Inzwischen habe ich aber eine "Lösung" ...

Interessant. Kannst du mal ein bisschen mehr darueber erzaehlen? (gerne 
mit eigenem Subject)

Ich  finde RISCO OS naemlich grundsaetzlich auch sehr interessant, aber 
habe den Eindruck das es halt eher so die Nische von alten Englaendern 
bedient die sich mit Wehmut an ihren Archimedes erinnern. Wuerdest du 
sagen das dies ein lebendiges Betriebsystem ist mit dem sich die 
Beschaeftigung lohnt?
Gibt es eine lebendige Communitiy?

Ich vermute mal RISC OS auf dem neuen PI4 koennte ziemlich atemberaubend 
sein oder?

Olaf
Gast
Olaf schrieb:
> Gibt es eine lebendige Communitiy?

https://www.riscosopen.org/forum/

> RISC OS auf dem neuen PI4

Ich nutze RISC OS hauptsächlich für Pi Zero und Pi 1A+ um die als 
"dicke" Mikrocontroller zu nutzen. Der Desktop ist aber auch schon auf 
dem Pi 1A+ sehr schnell so dass man auf einem Pi 3B+ den Unterschied 
nicht so merkt. Ausser bei Grafik-Benchmarks. Der Pi 4 wäre trotzdem 
interessant wegen den zwei HDMI-Ports. Nachdem die Foundation RISC OS zu 
Anfang noch sehr unterstützt hat:

https://www.raspberrypi.org/blog/risc-os-for-raspberry-pi/

Hat das aber inzwischen stark nachgelassen so dass alles mühsam von 
Raspbian portiert werden muss. Ist also noch nicht fertig:

https://gitlab.riscosopen.org/RiscOS/Sources/HAL/HAL_BCM2835/merge_requests/2

RISC OS läuft übrigens auch auf teuren Industrie-Boards z.B.

http://www.ti.com/tool/ELESAR-3P-SITARA-SOMS
https://revolution.kunbus.de/
https://www.wandboard.org/

Und auf ARM Laptops:

https://www.pine64.org/pinebook/
Ich kannte auch mal einen Kollegen, der hat als Verzeichnisnamen ganze 
Romane geschrieben. Damit hat er alle anderen regelmäßig zur 
Verzweiflung getrieben.
Da hilft dann, das aktuelle Projekt in ein Verzeichnis in der Root zu 
kopieren oder per subst zu linken.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.