2012-11-21 43 views
6

Tôi có hai tệp thực thi, cả hai được biên dịch chéo để chạy trong Android. Tôi đã đặt cả hai trên thiết bị trong cùng một thư mục. Tôi đã đặt tất cả các thư viện chia sẻ mà họ đang phụ thuộc vào trong cùng một thư mục, bao gồm ld-linux.so.3. Tôi chạy file thực thi bằng cách sử dụng:Nguyên nhân có thể có của "không thể phân đoạn bản đồ từ đối tượng được chia sẻ: hoạt động không được phép" và cách gỡ lỗi?

ld-linux.so.3 --library-path/path/to/thư viện executable_name

cả công việc trên các phiên bản cũ của Android khi chạy như bất kỳ người dùng. Cả hai hoạt động trên phiên bản Android mới nhất nếu chạy dưới dạng root. Chỉ có một tác phẩm trên phiên bản Android mới nhất khi chạy với bất kỳ người dùng nào. Thay vào đó nó mang lại:

thất bại trong việc lập bản đồ phân đoạn từ đối tượng chia sẻ: hoạt động executable_name không được phép

Làm thế nào tôi có thể tìm ra những gì là khác nhau với thực thi đó sẽ không chạy?

Tôi đọc rất nhiều trên mạng và hầu hết mọi người mà nhận được lỗi này, một trong hai:

A) không có thực quyền cho một trong những thư viện họ phụ thuộc vào hoặc thực thi chính nó.

hoặc

B) đang cố gắng chạy từ thư mục được gắn kết là NOEXEC.

cả hai trường hợp này đều không có vẻ như vậy. Nó có thể tìm thấy tất cả các thư viện và tôi có thể tự tải bất kỳ thư viện nào và xem những thứ khác mà nó phụ thuộc vào việc được giải quyết. Ngoài ra, tôi có thể chạy các tập lệnh cơ bản từ các thư mục quan tâm.

Phiên bản mới hơn của Android, Jelly Bean, là phiên bản hạt nhân Linux khác và tôi tự hỏi nếu điều đó có liên quan.

Điều gì cung cấp? Làm cách nào để gỡ lỗi?

+0

Khi được hỏi một cách khác nhau (với tiền thưởng) ở đây: http://stackoverflow.com/questions/13467951/issue-including-executable-with-android-application- khi-sử dụng-jelly-đậu – corbin

Trả lời

1

Vấn đề là cách thực thi được biên soạn. Chúng cần được biên dịch với một trình biên dịch chéo hỗ trợ đúng các thiết bị cánh tay mới hơn. Trình biên dịch tôi đã sử dụng các tệp thi hành được tạo ra sẽ chỉ hoạt động trên một tập con của các thiết bị cánh tay. Vấn đề không phải với các phiên bản Android khác nhau.

0

SELinux được bật theo mặc định trên Android 4.3, tuy nhiên nó được cho là "được phép" [0]. Có thể nhà cung cấp điện thoại của bạn đã thêm nhiều quy tắc hạn chế hơn.

[0] https://source.android.com/devices/tech/security/se-linux.html

+0

Vấn đề này cho thấy trên phiên bản đầu tiên của Jelly Bean, vì vậy trước khi thay đổi này. Nhưng, đây là một điều thú vị. Tôi đã không sử dụng 4,3 nhiều. – corbin

2

Tôi gặp lỗi này trong ngữ cảnh khác. Vì một số lý do, nó gây ra lỗi khi cố gắng sử dụng thư mục /tmp.

Để giải quyết này, tôi chỉ đơn giản là:

mkdir tmp 
export TMPDIR=`pwd`/tmp 
+0

** TMPDIR ** là gì? –

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