Я намагаюся зібрати прошивку для моєї linkys WRVS4400N.
lsпоказує, що існує, але коли він намагається запустити його, скаже, що його не існує. Я також можу catце, і це виконуваний, а не сценарій оболонки.
Я намагаюся зібрати прошивку для моєї linkys WRVS4400N.
lsпоказує, що існує, але коли він намагається запустити його, скаже, що його не існує. Я також можу catце, і це виконуваний, а не сценарій оболонки.
Відповіді:
Ви згадали, що результат file mkdepє 32-bit elf. Ви працюєте з 64-розрядним VM.
Приклад:
$ 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
Просто створіть новий 32-розрядний VM і компілюйте його там.
Чи встановлено це для виконання? Якщо ні, то chmod +x filename. Це у вашій ПАТІ? Якщо ні, то називайте це ./filenameшвидше, ніж просто filename.
Коли ви намагаєтеся виконати файл і bash каже, що його не існує, іноді це означає, що bash вважає, що файл є сценарієм, і що інтерпретатор, зазначений у першому рядку (#!), Не існує.
Якщо файли названі, mkdepя б опублікував вихід
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
Команда strace дає інформацію про зроблені системні виклики, наприклад, strace ls 2>ls.tставить наступне в ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
доступ ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (немає такого файлу чи каталогу)
відкрити ("/ 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
закрити (3) = 0
доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу)
відкрити ("/ lib / librt.so.1", O_RDONLY) = 3
прочитати (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 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.txtце має дати вам деяке уявлення про те, що відбувається. Можливо, вам доведеться встановити страйк із сховищ.
Ви змінюєте IFS у своєму сценарії? Я теж зіткнувся з тією ж проблемою в одному зі своїх сценаріїв і подумав те саме (32-бітний файл читається скриптом оболонки на 64-бітній машині). Але це було не в моєму випадку. Натомість я змінив IFS на кома "," і повернувся до нового рядка, який якимось чином переплутав аналізатор і спричинив цю помилку.
Я просто видалив будь-які зміни в IFS, і це працює просто чудово зараз !!!