1

몇 가지 유용한 무료/오픈 소스 도구를 Android에 이식했습니다. 하나는 옥타브이고 다른 하나는 gnuplot입니다. 그들은 Matlab과 같은 기능을 무료로 (말처럼) 제공하고 무료로 제공합니다 (맥주처럼). 흥미로운 방식으로 앱 안에 포장했습니다. 구체적으로,Jelly Bean 사용시 Android 응용 프로그램 실행 파일 포함

1) libs/armeabi 디렉토리 내에 실행 가능 및 공유 라이브러리를 포함합니다. 안드로이드 명명 규칙 때문에 그들에게 재미있는 이름을 주어야합니다.

2) 디렉토리 bin/및 mylib/을 만듭니다. 나는 그들에게 모든 권한을 준다.

3) bin/에서 압축을 푼 lib/ 디렉토리의 실행 파일에 대한 링크를 만듭니다. 나는 그들에게 정확한 이름과 완전한 허가를 준다.

4) 압축을 푼 lib/ 디렉토리의 공유 라이브러리에 mylib/의 링크를 만듭니다. 나는 그들에게 정확한 이름과 완전한 허가를 준다.

5) 그럼 이제 mylib/ 디렉토리와 안드로이드 터미널 에뮬레이터에서 실행 파일을 실행합니다 mylib/ 디렉토리에 가리 키도록 --library-path 옵션 라이브러리 중 하나입니다 ld-linux.so.3 사용합니다.

옥타브는 안드로이드가이 일의 모든 버전에서 완벽하게 작동하지만 젤리 빈을 실행할 때 나는 단지 그것을 실행하려고 할 때의 gnuplot이 오류를 제공합니다 :

error while loading shared libraries: gnuplot: failed to map segment 
from shared object: Operation not permitted. 

그럼, 왜 내가 중 하나에이 오류 것 이 두 실행 파일은 같은 방법으로 만들었습니까? 왜 젤리에서만? 또한, JB에, 내가 자신을 수퍼 유저로 만들면 모든 것이 다시 작동합니다.

디버깅하는 방법에 대한 의견이 있으십니까? 나는 모든 파일이 거기에 있고 그들이 가지고있는 권한을 가지고 있음을 확인했다.

도와주세요. 당신은 자유롭고, 오픈 소스이며, 교육적이고 유용한 앱을 원할 것입니다.

+0

다르게 설명하려고 시도했습니다. http://stackoverflow.com/questions/13502156/what-are-possible-causes-of-failed-to-map-segment-from-shared-object-operation – corbin

+0

이것이 작동하는지 모르겠지만이 오류가 발생했다고 생각하는 특정 줄에 "console.writeline"및/또는 "Log.d"와 함께 gnuplot 라이브러리를 다시 컴파일하고 일부 정보를 쓸 수 있습니다. –

+0

JellyBean 소스를 보면 바이너리 prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/lib에 "공유 객체에서 세그먼트를 매핑하지 못했습니다"라는 문자열이 포함되어 있습니다. /ld-2.7.so. 누구든지 빌드 된 정확한 소스를 찾는 방법을 알고 있습니까? 근원을 읽는 것은 단서를 줄 수 있습니다. 그것은 안드로이드 소스 사이트의 어딘가에 저장되어 있습니까? 나는 그것을 발견 할 수 없다. – emrys57

답변

0

문제는 실행 파일이 컴파일 된 방법과 관련이 있습니다. 새로운 암 장치를 제대로 지원하는 크로스 컴파일러로 컴파일해야했습니다. 컴파일러는 암 장치의 하위 집합에서만 작동하는 생성 된 실행 파일을 사용했습니다. 문제는 안드로이드의 다른 버전이 아니었다.

관련 문제