2012-11-27 35 views
26

Tôi đã tạo một bản nhị phân ARM gốc bằng cách sử dụng chuỗi công cụ GCC Android (Linux thuần túy, không có android hoặc NDK)."Không có tập tin hoặc thư mục" cố gắng thực thi nhị phân linux trên thiết bị Android

Tôi kết nối, từ PC, qua adb shell, tới máy tính bảng chạy Android 4. Tôi "adb push" 'đã sửa mã nhị phân đó vào/system/bin trên thiết bị đó, hy vọng tôi có thể thực thi ở đó. Tôi đã đánh dấu nó là có thể thực thi với chmod 777.

Nếu tôi cố thực hiện nó, tôi sẽ nhận được "Không có tệp hoặc thư mục như vậy".

Thông tin thêm: Chương trình nhỏ sử dụng fc và fm libs. Vì chuỗi công cụ ARM dường như không có crt1, trong đó, từ ví dụ tôi tìm thấy, thường chứa mã khởi động, chúng tôi đã tìm kiếm thông qua các tệp có chứa nó trong bản dựng android, tìm thấy crtbegin_dynamic và crtend_dynamic, nhưng tương đương _static, một trong các cặp đã bị mất tích, vì vậy tôi đã không vượt qua -static để GCC. Nó được xây dựng với "-nostdlib".

Điều gì có thể là (các) vấn đề?

+4

Bạn cần sử dụng nm hoặc tương tự để tìm phụ thuộc của tệp thực thi của bạn, nhưng thực tế bạn chỉ nên sử dụng gcc NDK để xây dựng cho Android trừ khi bạn nhấn mạnh vào việc làm theo cách khó. ** Xin lưu ý rằng câu hỏi này không liên quan gì đến thư viện bị thiếu cho máy phát triển **, mặc dù đã thu hút một câu trả lời phổ biến về chủ đề hoàn toàn khác biệt đó một cách bí ẩn. –

Trả lời

49

Nếu bạn đang làm việc trên nền tảng 64 bit như Ubuntu 64, thì mẹo này có thể giúp bạn giải quyết vấn đề. Chỉ cần cố gắng để có được các thư viện tương thích 32-bit i386 được cài đặt đơn giản với apt-get:

sudo apt-get install ia32-libs 

Nó rất hữu ích cho tôi. Hãy cho tôi biết nếu bạn đang mắc kẹt trong cùng một rắc rối.

Đối với Ubuntu 13.10 trở lên

Như aditya nói trong các ý kiến ​​để câu trả lời này:

Tính đến Ubuntu 13.10, người ta phải chạy này ngay bây giờ: sudo apt-get install lib32z1, bạn có thể cần phải nhận được C++ stdlibs quá, với điều này: sudo apt-get install lib32ncurses5 lib32stdc++6

+3

Tôi có thể làm điều này. –

+0

Khắc phục sự cố! –

+11

Kể từ Ubuntu 13.10, có vẻ như ia32-libs đã được thay thế bằng gói sau. Người ta phải chạy này ngay bây giờ: sudo apt-get install lib32z1' tôi phải có được C++ stdlibs quá, với điều này: sudo apt-get install lib32ncurses5 lib32stdC++ 6' – aditya

2

sửa đổi bình luận aditya của trên, bạn cũng có thể sử dụng sau cho stdlibs C++ trong Ubuntu 13.10:

sudo apt-get install lib32ncurses5 libstdc++6:i386 
+2

Điều này không liên quan gì đến câu hỏi được hỏi, mà những lo ngại đang chạy một tệp thực thi trên chính Android - một linux không sử dụng hệ thống đóng gói debian. –

Các vấn đề liên quan