Tôi đã gặp một vấn đề kỳ lạ nhất mà tôi từng gặp. Tôi đang biên dịch một ứng dụng cho CPU ARM với Linux trên bo mạch. Tôi đang sử dụng buildroot và tất cả đều tốt cho đến khi tôi cố gắng chạy ứng dụng trên mục tiêu: Tôi nhận được -sh: ./hw: not found
. Ví dụ:"sh: ./ <file> không tìm thấy" lỗi khi cố gắng thực thi một tệp
$ cat /tmp/test.cpp
#include <cstdio>
#include <vector>
int main(int argc, char** argv){
printf("Hello Kitty!\n");
return 0;
}
$ ./arm-linux-g++ -march=armv7-a /tmp/test.cpp -o /tftpboot/hw
tải tệp thi hành xuống đích; sau đó phát hành trên mục tiêu:
# ./hw
-sh: ./hw: Permission denied
# chmod +x ./hw
# ./hw
-sh: ./hw: not found
# ls -l ./hw
-rwxr-xr-x 1 root root 6103 Jan 1 03:40 ./hw
Có nhiều với nó: khi xây dựng với trình biên dịch distro, như arm-linux-gnueabi-g++ -march=armv7-a /tmp/test.cpp -o /tftpboot/hw
, ứng dụng chạy tốt!
Tôi đã so sánh các tệp thi hành thông qua readelf -a -W /tftpboot/hw
, nhưng không nhận thấy nhiều sự thiếu defference. I pasted both outputs here. Điều duy nhất tôi nhận thấy, là các dòng Version5 EABI, soft-float ABI
và Version5 EABI
. Tôi đã thử xóa sự khác biệt bằng cách chuyển một trong hai số -mfloat-abi=softfp
và -mfloat-abi=soft
, nhưng trình biên dịch dường như bỏ qua nó. Tôi cho rằng mặc dù, điều này không thực sự quan trọng, như trình biên dịch thậm chí không cảnh báo.
Tôi cũng nghĩ, có lẽ sh xuất ra lỗi này nếu tệp thực thi không tương thích theo một cách nào đó. Nhưng trên máy tính chủ của tôi, tôi thấy lỗi khác trong trường hợp này, ví dụ .:
$ sh /tftpboot/hw
/tftpboot/hw: 1: /tftpboot/hw: Syntax error: word unexpected (expecting ")")
tương tự http://stackoverflow.com/questions/14535897/buildroot-file-system-cross-compiling-dynamically-linked-application-fails-bu –