Tôi đang cố gắng biên dịch phần sụn cho linksys WRVS4400N của tôi.
ls
cho thấy tồn tại nhưng khi nó cố chạy, bash nói rằng nó không tồn tại. Tôi cũng có thể cat
, và nó là một tập lệnh thực thi, không phải là một kịch bản shell.
Tôi đang cố gắng biên dịch phần sụn cho linksys WRVS4400N của tôi.
ls
cho thấy tồn tại nhưng khi nó cố chạy, bash nói rằng nó không tồn tại. Tôi cũng có thể cat
, và nó là một tập lệnh thực thi, không phải là một kịch bản shell.
Câu trả lời:
Bạn đã đề cập rằng đầu ra file mkdep
là 32-bit elf
. Bạn đang chạy máy ảo 64 bit.
Thí dụ:
$ 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
Chỉ cần tạo một máy ảo 32 bit mới và biên dịch nó ở đó.
Nó được thiết lập để được thực thi? Nếu không, thì chmod +x filename
. Có phải trong PATH của bạn? Nếu không, sau đó gọi nó là ./filename
hơn là chỉ filename
.
Khi bạn cố gắng thực thi một tệp và bash nói rằng nó không tồn tại, đôi khi điều đó có nghĩa là bash tin rằng tệp đó là một tập lệnh và trình thông dịch được chỉ định trong dòng đầu tiên (#!) Không tồn tại.
Nếu các tập tin được đặt tên mkdep
tôi sẽ gửi đầu ra của
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
Lệnh strace cung cấp thông tin về các cuộc gọi hệ thống được thực hiện, ví dụ như strace ls 2>ls.t
đặt các mục sau vào ls.t
thực hiện ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0 brk (0) = 0x8061000 truy cập ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy) mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 truy cập ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy) mở ("/ 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 đóng (3) = 0 truy cập ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy) mở ("/ lib / librt.so.1", O_RDONLY) = 3 đọc (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
điều này sẽ cho bạn một số ý tưởng về những gì đang xảy ra. Bạn có thể cần phải cài đặt strace từ kho.
Bạn đang thay đổi IFS trong kịch bản của bạn? Tôi cũng gặp phải vấn đề tương tự trong một trong các tập lệnh của mình và cũng nghĩ như vậy (tệp 32 bit được đọc bởi tập lệnh shell trên máy 64 bit). Nhưng đó không phải là vấn đề trong trường hợp của tôi. Thay vào đó, tôi đã thay đổi IFS thành dấu phẩy ',' và quay lại dòng mới khiến phần nào đó nhầm lẫn trình phân tích cú pháp và gây ra lỗi này.
Tôi vừa xóa bất kỳ thay đổi nào trong IFS và nó hoạt động tốt ngay bây giờ !!!