Fehler beim Laden gemeinsam genutzter Bibliotheken: /tmp/zshgYCSAH: Datei zu kurz

Fehler beim Laden gemeinsam genutzter Bibliotheken: /tmp/zshgYCSAH: Datei zu kurz

Beim Versuch, in zsh auszuführen, wurde der folgende Befehl ausHier

/lib64/ld-linux-x86-64.so.2 =(/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}'\ 
| sudo gcc -x c -o /dev/stdout -)

Es wird der folgende Fehler zurückgegeben

/tmp/zshgYCSAH: Fehler beim Laden gemeinsam genutzter Bibliotheken: /tmp/zshgYCSAH: Datei zu kurz

Die Ausgabe

/lib64/ld-linux-x86-64.so.2 /bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}'
#include <stdio.h>
int main(){printf("c one liners\n");}

gibt das erwartete Verhalten zurück.

Übersehe ich hier etwas wirklich Offensichtliches?

OS- und GCC-Berechtigungen und -Version

uname -a
Linux debian 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux

\ls -l /usr/bin/x86_64-linux-gnu-gcc-8 
-rwxr-x--- 1 root root 1100664 Apr  6  2019 /usr/bin/x86_64-linux-gnu-gcc-8

sudo gcc --version
gcc (Debian 8.3.0-6) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Kontext

file =(/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | sudo gcc -x c -o /dev/stdout -)
/tmp/zshrOdFnK: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d94f408ab2b445d20624e2b1fb7c4939dfc25c46, not stripped

\ls -l =(/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | sudo gcc -x c -o /dev/stdout -)
-rw------- 1 paulo paulo 16600 Mar 30 12:37 /tmp/zshTNxAXl

Der Compiler-Unterbefehl scheint ordnungsgemäß zu funktionieren

/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | gcc -x c -o a.out -

ls -l a.out
-rwxr-xr-x 1 root root 16600 Mar 30 12:03 a.out

du a.out   
20  a.out

./a.out 
c one liners

Antwort1

Es lohnt sich zu überprüfen, ob der Compiler-Unterbefehl korrekt funktioniert

/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | gcc -x c -o a.out -
ls -l a.out

Wenn das Ergebnis ist, dass die temporäre Ausgabedatei die Länge Null hat, wird dies den angezeigten Fehler auslösen

/lib64/ld-linux-x86-64.so.2 /dev/null
/dev/null: error while loading shared libraries: /dev/null: file too short

Antwort2

Habe gerade herausgefunden, wo das Problem liegt: Berechtigungen.

Berechtigungen von GCC

\ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 5 Feb 25  2019 /usr/bin/gcc -> gcc-8

\ls -l /usr/bin/gcc-8
lrwxrwxrwx 1 root root 22 Apr  6  2019 /usr/bin/gcc-8 -> x86_64-linux-gnu-gcc-8

\ls -l /usr/bin/x86_64-linux-gnu-gcc-8 
-rwxr-x--- 1 root root 1100664 Apr  6  2019 /usr/bin/x86_64-linux-gnu-gcc-8

Berechtigungen für ELF-Objekte

\ls -l =(/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | sudo gcc -x c -o /dev/stdout -)
-rw------- 1 paulo paulo 16600 Mar 30 12:37 /tmp/zshTNxAXl

Die Ausgabe des Befehls mit dem vorangestelltensudo

sudo /lib64/ld-linux-x86-64.so.2 =(/bin/echo -e '#include <stdio.h>\nint main(){printf("c one liners\\n");}' | sudo gcc -x c -o /dev/stdout -)                        
c one liners

gibt das richtige Ergebnis zurück.

verwandte Informationen