Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

Leerzeichen im Pfad - falsche Parameter bei AVR embedded

Beitragvon Timm Thaler » 13. Feb 2019, 03:06 Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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?
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

Beitragvon Socke » 13. Feb 2019, 08:57 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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
Socke
Lazarusforum e. V.
 
Beiträge: 2683
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Timm Thaler » 13. Feb 2019, 11:43 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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: 1021
Registriert: 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
Nach oben

Beitragvon Timm Thaler » 13. Feb 2019, 22:18 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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...
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

Beitragvon af0815 » 14. Feb 2019, 06:57 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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).
af0815
 
Beiträge: 3924
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Timm Thaler » 14. Feb 2019, 15:28 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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: 1021
Registriert: 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
Nach oben

Beitragvon Timm Thaler » 14. Feb 2019, 21:49 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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.
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

Beitragvon af0815 » 15. Feb 2019, 13:52 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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).
af0815
 
Beiträge: 3924
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Timm Thaler » 15. Feb 2019, 17:19 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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.
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

Beitragvon af0815 » 15. Feb 2019, 18:24 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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).
af0815
 
Beiträge: 3924
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon MacWomble » 15. Feb 2019, 18:36 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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.
MacWomble
Lazarusforum e. V.
 
Beiträge: 966
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.3 Cinnamon / FPC/Lazarus | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Timm Thaler » 15. Feb 2019, 23:17 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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: 1021
Registriert: 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
Nach oben

Beitragvon Timm Thaler » 15. Feb 2019, 23:30 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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.
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

Beitragvon MacWomble » 16. Feb 2019, 00:25 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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.
MacWomble
Lazarusforum e. V.
 
Beiträge: 966
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.3 Cinnamon / FPC/Lazarus | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon af0815 » 16. Feb 2019, 08:50 Re: Leerzeichen im Pfad - falsche Parameter bei AVR embedded

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).
af0815
 
Beiträge: 3924
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried