[Linux] Kann Programm nicht ausführen



  • Hallo,

    ich habe da ein sehr seltsames Problem, bei dem ich nicht mehr weiter weiß.
    Es gibt da ein Programm, dass ich gerne starten würde:

    $ ls -l -h ./lmgrd 
    -rwxrwxrwx 1 me me 1012K 2010-07-12 09:11 ./lmgrd
    

    Aber obwohl es eiondeutig vorhanden ist, wird es nicht gefunden, wenn ich es starten möchte:

    $ ./lmgrd 
    bash: ./lmgrd: No such file or directory
    

    Ich verwende Ubuntu 10.04 LTS. Kann mir jemand helfen?

    Vielen Dank im Voraus.


  • Mod

    Gib mal die Ausgabe von file lmgrd und uname -a (zensier ruhig, wenn dir die Ausgabe zu viel verrät). Mein Verdacht: lmgrd ist für eine andere Architektur als deine.



  • Entweder hast du dich vertippt oder die Datei heißt anders als du glaubst. Ein Leerzeichen am Ende des Dateinamens ist zum Beispiel eine gemeine Falle. "No such file or directory" ist eine Fehlermeldung, die kaum eindeutiger geht.

    Deswegen nehm ich tab-completion, dann werden die Dateinamen immer korrekt.



  • Ich bin der Meinung, dass die Datei mittels #! versucht einen Interpreter für sich aufzurufen, den es auf deinem System nicht gibt. Einfach mal reingucken 😃



  • YASC schrieb:

    Ich bin der Meinung, dass die Datei mittels #! versucht einen Interpreter für sich aufzurufen, den es auf deinem System nicht gibt. Einfach mal reingucken 😃

    Nein, das kann nicht sein. Dann wäre die Fehlermeldung anders:

    $ echo '#!/bin/foo' > foo
    $ chmod +x foo
    $ ./foo 
    bash: ./foo: /bin/foo: bad interpreter: No such file or directory
    $
    


  • Dann bin ich wohl einfach nur alt :(. Früher war das genau die Fehlermeldung.



  • SeppJ schrieb:

    Gib mal die Ausgabe von file lmgrd und uname -a (zensier ruhig, wenn dir die Ausgabe zu viel verrät). Mein Verdacht: lmgrd ist für eine andere Architektur als deine.

    Bite sehr:

    $ uname -a
    Linux PCName 2.6.32-33-generic-pae #71-Ubuntu SMP Wed Jul 20 18:46:41 UTC 2011 
    i686 GNU/Linux
    $ file ./lmgrd
    ./lmgrd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
    

    Scheint in Ordnung zu sein. 🙂

    Christoph schrieb:

    Entweder hast du dich vertippt oder die Datei heißt anders als du glaubst. Ein Leerzeichen am Ende des Dateinamens ist zum Beispiel eine gemeine Falle. "No such file or directory" ist eine Fehlermeldung, die kaum eindeutiger geht.

    Deswegen nehm ich tab-completion, dann werden die Dateinamen immer korrekt.

    Das benutze ich ja immer. Schon allein, weil ich so faul bin. 😉

    Ich hab' da auch mal ein kleines Test-Programm geschreiben:

    #include <stdio.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    int main()
    {
      const char *filename = "./lmgrd";
    
      struct stat sb;
      if(stat(filename,  &sb) == -1)
        perror("stat");
      else
        printf("stat works.\n");
    
      if(execl(filename, filename, (char*)NULL) == -1)
        perror("execl");
    
      return 0;
    }
    

    Ausgabe:

    $ gcc test.c && ./a.out 
    stat works.
    execl: No such file or directory
    

    😕



  • Kannst Du mal den Dateinamen direkt aus dem System in Hexadezimal anzeigen lassen? Also nicht irgendwo den Namen, so wie man glaubt wie er heißt in einen Unicode-Hexadezimal Konverter eingeben, sondern wirklich in dem System die Dateien auflisten lassen, so das auch die betreffende Datei dabei ist und dann dessen Namen z.B. einer Variable zuweisen und dann den Hexadezimalwert wiederum in Unicode darstellen. Wenn Du weißt was ich meine.


  • Mod

    Das was die lmgrd macht, ist nicht zufällig diese Meldung auszugeben? 😃

    Kannst du mal gdb lmgrd machen und dann run tippen und sagen, was passiert? (gdb muss eventuell noch nachinstalliert werden)



  • anonymous© schrieb:

    Kannst Du mal den Dateinamen direkt aus dem System in Hexadezimal anzeigen lassen? Also nicht irgendwo den Namen, so wie man glaubt wie er heißt in einen Unicode-Hexadezimal Konverter eingeben, sondern wirklich in dem System die Dateien auflisten lassen, so das auch die betreffende Datei dabei ist und dann dessen Namen z.B. einer Variable zuweisen und dann den Hexadezimalwert wiederum in Unicode darstellen. Wenn Du weißt was ich meine.

    Wie mache ich das? 😕

    SeppJ schrieb:

    Das was die lmgrd macht, ist nicht zufällig diese Meldung auszugeben? 😃

    Kannst du mal gdb lmgrd machen und dann run tippen und sagen, was passiert? (gdb muss eventuell noch nachinstalliert werden)

    Das habe ich auch schon versucht:

    $ gdb ./lmgrd 
    GNU gdb (GDB) 7.1-ubuntu
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i486-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /home/me/Linux_Licensing_Daemon/lmgrd...(no debugging symbols found)...done.
    (gdb) run
    Starting program: /home/me/Linux_Licensing_Daemon/lmgrd 
    /bin/bash: /home/me/Linux_Licensing_Daemon/lmgrd: No such file or directory
    /bin/bash: /home/me/Linux_Licensing_Daemon/lmgrd: Success
    During startup program exited with code 1.
    (gdb)
    

    Auch mit strace :

    $ strace ./lmgrd
    execve("./lmgrd", "./lmgrd", /* 20 vars */) = -1 ENOENT (No such file or directory)
    dup(2)                                  = 3
    fcntl64(3, F_GETFL)                     = 0x8002 (flags O_RDWR|O_LARGEFILE)
    fstat64(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
    mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774f000
    _llseek(3, 0, 0xbfc97148, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
    write(3, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
    ) = 40
    close(3)                                = 0
    munmap(0xb774f000, 4096)                = 0
    exit_group(1)                           = ?
    


  • Adlerschwinge schrieb:

    anonymous© schrieb:

    Kannst Du mal den Dateinamen direkt aus dem System in Hexadezimal anzeigen lassen? Also nicht irgendwo den Namen, so wie man glaubt wie er heißt in einen Unicode-Hexadezimal Konverter eingeben, sondern wirklich in dem System die Dateien auflisten lassen, so das auch die betreffende Datei dabei ist und dann dessen Namen z.B. einer Variable zuweisen und dann den Hexadezimalwert wiederum in Unicode darstellen. Wenn Du weißt was ich meine.

    Wie mache ich das? 😕

    vielleicht meint er sowas:
    hallo@welt:~ 52 > echo "hallo" | od -h
    0000000 6168 6c6c 0a6f
    0000006



  • ldd lmgrd
    

  • Mod

    Jetzt wo ich den Pfad sehe und weiß, was das für ein Programm ist: Du bist noch nicht auf die Idee gekommen, einfach mal Google zu fragen? 😡

    Frage: Google: linux Licensing Daemon lmgrd no such file or directory
    Antwort: http://idlastro.gsfc.nasa.gov/idl_html_help/License_Manager_Startup.html



  • SeppJ schrieb:

    Jetzt wo ich den Pfad sehe und weiß, was das für ein Programm ist: Du bist noch nicht auf die Idee gekommen, einfach mal Google zu fragen? 😡

    http://idlastro.gsfc.nasa.gov/idl_html_help/License_Manager_Startup.html
    Google: linux Licensing Daemon lmgrd no such file or directory

    Kein Grund sich so aufzuregen. 🙄 Typisch Moderatoren...

    Die Installation von "lsb" hat geholfen.



  • Adlerschwinge schrieb:

    Kein Grund sich so aufzuregen. 🙄 Typisch Moderatoren...

    Getroffene Hunde...? 😉 Mensch, habt euch lieb. War halt diesmal doof gelaufen, 's nächste Mal läufts besser.


Anmelden zum Antworten