Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

Ich versuche seit 3 Tagen den Crosscompiler für AVR Embedded für Lazarus und FPC trunk einzurichten. Mehrmals installiert und deinstalliert, mit dem Laz1.9 und FPC3.1.1 verglichen, dort läuft das Projekt, im aktuellen Trunk bricht es beim Compilieren ab.

Letztlich habe ich gesehen, dass alles compiliert wird und durchläuft bis auf den letzten Linkeraufruf:

Code: Alles auswählen

Projekt kompilieren, OS: embedded, CPU: avr, Ziel: datalogger: Exit code 1, Fehler: 1, Warnungen: 3, Hinweise: 20
...
[0.335] Executing "C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-ld.exe" with command line "-g     --gc-sections  -L. -o "D:\Eigene Dateien\Technik\Datalogger\datalogger.elf" -T "D:\Eigene Dateien\Technik\Datalogger\link.res""
Size of Code: 29068 bytes
Size of initialized data: 336 bytes
Size of uninitialized data: 814 bytes
[0.353] Searching file C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-objcopy.exe... found
Using util C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-objcopy.exe
[0.353] Executing "C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-objcopy.exe" with command line "-O ihex D:\Eigene Dateien\Technik\Datalogger\datalogger.elf D:\Eigene Dateien\Technik\Datalogger\datalogger.hex"
Usage: C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-objcopy.exe [option(s)] in-file [out-file]
 Copies a binary file, possibly transforming it in the process
 The options are:
...
datalogger.lpr(194,0) Error: Error while linking


In allen Compiler- und Linkeraufrufen werden die Dateien in Anführungszeichen eingeschlossen, im letzten Aufruf für avr-embedded-objcopy.exe nicht, und dann kann der Linker mit den Parametern nichts anfangen.

1. Das muss schonmal anders gewesen sein, sonst würde es ja in früheren Versionen nicht funktionieren.
2. Windows kann seit Windows95 Leerzeichen in Pfad- und Dateinamen. Kann man das nicht im Jahr 2019 endlich mal in den Griff bekommen?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Socke »

Bitte erstelle einen Bug-Eintrag unter http://bugs.freepascal.org/. Wenn der Programmaufruf von Lazaraus generiert und durchgeführt wird, stehen die Chancen gut, diesen Fehler zu beheben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

Socke hat geschrieben:Bitte erstelle einen Bug-Eintrag unter http://bugs.freepascal.org/.


Done. https://bugs.freepascal.org/view.php?id=35072

Ich frag mich nur, warum das unter Laz1.9 ging und unter der aktuellen Stable und Trunk nicht mehr. Ich finde einfach nichts, was sich da geändert hat. Und relative Pfade kann man an den Linker eigentlich auch nicht übergeben.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

Hm ja, Meinung zum Bugreport: Es liegt an der Toolchain. Nur dass ich die gleiche Toolchain wie für Laz1.9 und FPC3.1.1 verwende, die gleichen Projekte, die gleichen Programmpfade...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von af0815 »

Unterscheidet sich die Setzung der Hochkommas ?

Code: Alles auswählen

0.353 Executing "C:\Tools\Lazarus\cross\bin\avr-embedded\avr-embedded-objcopy.exe" with command line "-O ihex D:\Eigene Dateien\Technik\Datalogger\datalogger.elf D:\Eigene Dateien\Technik\Datalogger\datalogger.hex"


Ja - Bug
Nein - Toolchain
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

af0815 hat geschrieben:Unterscheidet sich die Setzung der Hochkommas ?


Das sehe ich nicht, weil ich die Ausgabe dieser Zeilen unter Laz1.9 trotz -va nicht habe und bisher nicht erzeugen konnte.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

So, Schnauze voll. Hab das Projekt jetzt in einen Pfad ohne Leerzeichen geschoben. Sollen sich doch andere drum ne Waffel machen.

Es ist schon peinlich, dass Pascal 2019 an sowas wie Leerzeichen im Pfad scheitert. Lazarus läßt sich auch nicht in C:\Programme installieren, weil - tada - der Symlink auf C:\Program Files geht. Der Ordner heisst seit 25 Jahren so. Die Rechtevergabe fürs Compilieren könnte man ja anpassen, aber an einem Leerzeichen scheitert es dann.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von af0815 »

Das ist nicht Pascalspezifisch. Warum glaubst du weichen auc C++ ler auf Pfade ohne Leerzeichen aus. Das Leerzeichen ist nunmal ein Trennzeichen in der Kommandozeile. Wenn konsequent mit Escaped wird dann geht es.

Ja,ja 8.3 war ja vieeeel besser. Und vor allen MS mit den vorspielen falscher Pfade ist natürlich das tüpfelchen auf dem i. Da hast du einen Pfad ohne Leerzeichen und das BS macht einen mit Leerzeichen, echt geil. Also verwende kein Windows :shock: :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

1. Leerzeichen im Pfad und Dateinamen sind Bestandteil von Windows und auch unter Linux zulässig. Damit sollten sie auch unterstützt werden.
2. Das letzte Mal, dass bei mir ein Programm ein Problem mit Leerzeichen im Dateinamen hatte, war eine Eagle 3.x Version vor 20 Jahren.
3. Bis Laz1.9 hat das Kompilieren von AVR embedded mit Leerzeichen im Pfad funktioniert, und an der Toolchain hat sich soweit ich das sehe nichts geändert. Es war bisher auch kein Problem, die Dateinamen einfach in "" eingeschlossen zu übergeben.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von af0815 »

Der Dateiname ist korrekt escaped nur in der übergebenden Commandline passt das nicht. Die Frage ist, wer genau macht die Commandline ? Ist das Lazarus oder ein anderer Prozess, oder ein makescript oder ...
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von MacWomble »

Timm Thaler hat geschrieben:Leerzeichen im Pfad und Dateinamen sind Bestandteil von Windows und auch unter Linux zulässig. Damit sollten sie auch unterstützt werden.
L
Das ist falsch!
Keine Windows-Version kann wirklich mit Leerzeichen umgehen, das ist nur was man sieht.
Windows arbeitet nach wie vor mit 8.3, nur wird das durch Ersetzung in der Darstellung (und nur dort) kaschiert.
Wenn du 'Eigene Dateien' aufrufst macht Windows daraus 'Eigene~1' bzw. 'my~1'und arbeitet auch damit.
Den Ordner 'Eigene Dateien' gibt es ohnehin nur bis W7. Wie die Ordner in deinem Windows benannt sind kannst du herausfinden, wenn du den Rechner mit Linux bootest.
Die langen Dateinamen in Windows kommen aus einer 'Datenbank' des NTFS-Systems, die andere Benennung der Ordner wird durch Symlinks bewerkstelligt, welche ggf. erneut interpretiert werden.

Wenn ich mir deinen obigen String anschaue, fällt mir sofort die fehlende Einschließung auf. Richtig sollte es lauten:
... with command line -O ihex "D:\Eigene Dateien\Technik\Datalogger\datalogger.elf" "D:\Eigene Dateien\Technik\Datalogger\datalogger.hex"
und dann geht es auch.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

MacWomble hat geschrieben:Windows arbeitet nach wie vor mit 8.3... Wie die Ordner in deinem Windows benannt sind kannst du herausfinden, wenn du den Rechner mit Linux bootest.


Wasn Quatsch. Das war nur unter Win95 mit FAT16 noch so. FAT32 und NTFS haben bis zu 256 Zeichen Unicode (Pfad + Name). Wenn ich einen FAT32 formatierten Stick oder eine NTFS formatierte Platte an den Raspberry, den Fernseher, das Autoradio stecke werden immer lange Namen angezeigt. Dass Windows auf Verlangen immer noch 8.3 Namen mitführt, ist der Rückwärtskombatibilität für alte Programme geschuldet, kann man abschalten.

MacWomble hat geschrieben:Wenn ich mir deinen obigen String anschaue, fällt mir sofort die fehlende Einschließung auf...


Ja natürlich, fällt mir auch auf. Nur finde ich ums Verrecken nicht die Stelle, wo dieser String zusammengebastelt wird. Nochmal: vor Laz 1.9 / FPC 3.2 ging das. Entweder hat sich jemand gedacht: Ok, können wir uns sparen, oder bei der Umstellung des Linkeraufrufes von TProcess.CommandLine auf TProcess.Parameters ist was schiefgegangen. Damit hatte ich auch schonmal Probleme, und hab immer noch die "depracted" CommandLine im Programm, weil der Aufruf von curl mit Parametern eben genau wegen irgendwelcher Zusammenbastelsachen nicht funktioniert. Da muss für den Telegram Bot auch ein String in Anführungszeichen stehen und das geht mit TProcess-Parameters nicht.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von Timm Thaler »

Oha, es gibt einen Fix.

Und, verdammte Axt, ich war schon an der richtigen Stelle in compiler/systems/t_embed.pas. Mein Fix hat nur nicht funktioniert, weil ich vergessen habe die "" zu escapen. Dafür gibt es jetzt die witzige Funktion "maybequoted". Mal sehen ob das auch eine Lösung für mein curl-Problem ist.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von MacWomble »

Timm Thaler hat geschrieben:Wasn Quatsch. Das war nur unter Win95 mit FAT16 noch so. FAT32 und NTFS haben bis zu 256 Zeichen Unicode (Pfad + Name). Wenn ich einen FAT32 formatierten Stick oder eine NTFS formatierte Platte an den Raspberry, den Fernseher, das Autoradio stecke werden immer lange Namen angezeigt. Dass Windows auf Verlangen immer noch 8.3 Namen mitführt, ist der Rückwärtskombatibilität für alte Programme geschuldet, kann man abschalten.

Ja, hab da was verwechselt- sorry. :oops:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitrag von af0815 »

Geil, die maybequoted muss ich mir ansehen. Warum sind so super Funktionen immer unter dem Radar :shock:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten