2012-11-21 12 views
6

Mam dwa pliki wykonywalne, obie krzyż skompilowane do uruchomienia w systemie Android. Umieściłem oba urządzenia na tym samym katalogu. Umieściłem wszystkie współdzielone biblioteki, które są zależne w tym samym katalogu, w tym ld-linux.so.3. Biegnę wykonywalne za pomocą:Jakie są możliwe przyczyny "nieudanego odwzorowania segmentu z obiektu udostępnionego: operacja niedozwolona" i jak debugować?

LD-linux.so.3 --library-ścieżka/ścieżka/do/biblioteki executable_name

zarówno praca na starszych wersjach Androida, gdy uruchomiony jako dowolnego użytkownika. Oba działają na najnowszej wersji Androida, jeśli działają jako root. Tylko jeden działa na najnowszej wersji Androida, gdy działa jako dowolny użytkownik. Zamiast tego daje:

nie map segmentu z obiektu dzielonego: operacja executable_name niedozwolony

Jak mogę dowiedzieć się, co jest inny z pliku wykonywalnego, który nie będzie działać?

dużo czytam online i większość ludzi, że ten błąd, albo:

A) nie mają uprawnień do wykonywania jednej z bibliotek są one zależne lub samego pliku wykonywalnego.

lub

B) próbuje uruchomić z katalogu, który jest zamontowany jako NOEXEC.

oba te elementy wydają się nie mieć znaczenia. Może znaleźć wszystkie biblioteki i mogę załadować dowolną bibliotekę samodzielnie i zobaczyć, jakie inne rzeczy są zależne od rozwiązania. Mogę również uruchamiać podstawowe skrypty z interesujących ich katalogów.

Nowsza wersja Androida, Jelly Bean, to inna wersja jądra Linuksa i zastanawiam się, czy jest to powiązane.

Co dajesz? Jak mogę debugować?

+0

zadawane inny sposób (z laska) tutaj: http://stackoverflow.com/questions/13467951/issue-including-executable-with-android-application- kiedy używa się jelly-fasoli – corbin

Odpowiedz

1

Problem był z tego, jak zostały skompilowane pliki wykonywalne. Musiały zostać skompilowane za pomocą kompilatora krzyżowego, który prawidłowo obsługiwał nowsze urządzenia ramienia. Użyty kompilator wygenerował pliki wykonywalne, które działają tylko na podzbiorze urządzeń uzbrojonych. Problem nie dotyczył różnych wersji Androida.

2

Miałem ten błąd w innym kontekście. Z jakiegoś powodu powoduje błąd podczas próby użycia folderu /tmp.

Aby rozwiązać ten problem po prostu:

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

Co to jest ** TMPDIR **? –

Powiązane problemy