Próbuję skompilować oprogramowanie wewnętrzne dla mojego linksys WRVS4400N.
lspokazuje, że istnieje, ale gdy próbuje go uruchomić, bash mówi, że nie istnieje. Mogę to catzrobić i jest to plik wykonywalny, a nie skrypt powłoki.
Próbuję skompilować oprogramowanie wewnętrzne dla mojego linksys WRVS4400N.
lspokazuje, że istnieje, ale gdy próbuje go uruchomić, bash mówi, że nie istnieje. Mogę to catzrobić i jest to plik wykonywalny, a nie skrypt powłoki.
Odpowiedzi:
Wspomniałeś, że wynikiem file mkdepjest 32-bit elf. Używasz 64-bitowej maszyny wirtualnej.
Przykład:
$ uname -m
x86_64
$ ls -l ./example
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example
-bash: ./example: No such file or directory
Utwórz nową 32-bitową maszynę wirtualną i tam ją skompiluj.
Czy jest ustawiony na wykonywalność? Jeśli nie, to wtedy chmod +x filename. Czy to jest w twojej ŚCIEŻCE? Jeśli nie, to nazwij to ./filenameraczej niż po prostu filename.
Kiedy próbujesz uruchomić plik i bash mówi, że on nie istnieje, czasami oznacza to, że bash wierzy, że plik jest skryptem i że interpreter określony w pierwszym wierszu (#!) Nie istnieje.
Jeśli pliki zostaną nazwane mkdep, opublikowałbym dane wyjściowe
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
Polecenie strace podaje informacje o wykonanych wywołaniach systemowych, na przykład strace ls 2>ls.tumieszcza następujące polecenie w ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Brak takiego pliku lub katalogu)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Brak takiego pliku lub katalogu)
open ("/ etc / ld.so.cache", O_RDONLY) = 3
fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 32311, ...}) = 0
mmap2 (NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000
close (3) = 0
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Brak takiego pliku lub katalogu)
open ("/ lib / librt.so.1", O_RDONLY) = 3
czytaj (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0 \ 3 \ 0 \ 1 \ 0 \ 0 \ 0 \ 240 \ 30 \ 0 \ 0004 \ 0 \ 0 \ 0 "..., 512) = 512
fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 30624, ...}) = 0
strace ./mkdep 2>mkdep.strace.txtto dać ci pojęcie o tym, co się dzieje. Być może trzeba zainstalować strace z repozytoriów.
Zmieniasz IFS w swoim skrypcie? Ja też napotkałem ten sam problem w jednym ze swoich skryptów i pomyślałem tak samo (plik 32-bitowy jest odczytywany przez skrypt powłoki na 64-bitowej maszynie). Ale to nie był problem w moim przypadku. Zamiast tego zmieniłem IFS na przecinek i wróciłem do nowej linii, która jakoś pomieszała parser i spowodowała ten błąd.
Właśnie usunąłem wszelkie zmiany w IFS i teraz działa dobrze !!!