Я пытаюсь скомпилировать прошивку для моего linksys WRVS4400N.
ls
показывает, что существует, но когда он пытается запустить его, bash говорит, что его не существует. Я также могу cat
, и это исполняемый файл, а не сценарий оболочки.
Я пытаюсь скомпилировать прошивку для моего linksys WRVS4400N.
ls
показывает, что существует, но когда он пытается запустить его, bash говорит, что его не существует. Я также могу cat
, и это исполняемый файл, а не сценарий оболочки.
Ответы:
Вы упомянули о том , что выход file mkdep
есть 32-bit elf
. Вы используете 64-битную виртуальную машину.
Пример:
$ 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-битную виртуальную машину и скомпилируйте ее там.
Это установлено для того, чтобы быть исполняемым? Если нет, тогда 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 access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (нет такого файла или каталога) mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (такого файла или каталога нет) 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 (нет такого файла или каталога) open ("/ lib / librt.so.1", O_RDONLY) = 3 читать (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.txt
это дать вам некоторое представление о том, что происходит. Вам может понадобиться установить strace из репозиториев.
Вы меняете IFS в своем сценарии? Я тоже столкнулся с той же проблемой в одном из моих сценариев и думал так же (32-битный файл читается сценарием оболочки на 64-битной машине). Но это не проблема в моем случае. Вместо этого я поменял IFS на запятую ',' и вернулся к новой строке, которая каким-то образом запутала синтаксический анализатор и вызвала эту ошибку.
Я только что удалил все изменения в IFS, и теперь он работает просто отлично !!!