2011-09-17 3 views
6

나는 벽에서 내 머리를 치기 시작했다. 나는이 문제에 대해 찾을 수있는 모든 SO 스레드를 읽었으며 문제에 대한 모든 단일 Google 결과를 읽고 스쿼트를 찾을 수 없습니다. 나는 C++로 2D 엔진을 작성한 안드로이드 앱을 개발 중이며 NDK r6b와 stlport의 공유 버전을 사용하고 있습니다. libstlport_shared 용 .so 파일이 생성되어 내 libs 폴더에 성공적으로 복사됩니다. 나는 장치에서 adb 셸을 사용하여 검사했고 .so 파일이 올바르게 복사되었습니다.libstlport_shared가 존재하더라도 링크하지 못했습니다 ...?

내 .mk 파일을 수정하여 libstlport_shared.so를 필수 모듈로 명시 적으로 선언하는 등 여러 가지 해결책을 시도했습니다. 컴파일하는 동안 모든 것이 잘되고 APK에 나타나서 장치에 성공적으로 복사됩니다. 내 곧 게임의 슈퍼 비밀 멋진 이름을 포기하지 않는 나는이 "mypackagename"내 실제 패키지 이름을 대체

09-17 17:35:26.450: DEBUG/dalvikvm(19277): Trying to load lib /data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so 0x476c6f30 
09-17 17:35:26.450: INFO/dalvikvm(19277): Unable to dlopen(/data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so): Cannot load library: link_image[1995]: failed to link libstlport_shared.so 
09-17 17:35:26.450: WARN/dalvikvm(19277): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lca/ascensionsystems/mypackagename/Ascengine;.<clinit> 
09-17 17:35:26.450: WARN/dalvikvm(19277): threadid=8: thread exiting with uncaught exception (group=0x40025a70) 
09-17 17:35:26.470: VERBOSE/WindowManager(4837): Remove Window{479ca678 Starting ca.ascensionsystems.mypackagename paused=false}: mSurface=Surface(name=Starting ca.ascensionsystems.mypackagename, identity=90) mExiting=false isAnimating=true [email protected] inPendingTransaction=false mDisplayFrozen=false 
09-17 17:35:26.470: ERROR/WindowManager(4837): return in removeWindowLocked 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): FATAL EXCEPTION: GLThread 9 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): java.lang.ExceptionInInitializerError 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at ca.ascensionsystems.mypackagename.GL2JNIView$Renderer.onSurfaceChanged(GL2JNIView.java:336) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1327) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): Caused by: java.lang.UnsatisfiedLinkError: Library stlport_shared not found 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at java.lang.Runtime.loadLibrary(Runtime.java:461) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at java.lang.System.loadLibrary(System.java:557) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at ca.ascensionsystems.mypackagename.Ascengine.<clinit>(Ascengine.java:26) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  ... 3 more 
09-17 17:35:26.500: WARN/ActivityManager(4837): Force finishing activity ca.ascensionsystems.mypackagename/.mypackagenameActivity 

참고 : 그러나 나는이 오류가 발생합니다. :) 또한 Ascengine은 또 다른 .SO이고 내 주요 응용 프로그램 인 제 2D 엔진입니다.

누구나 이런 문제가 발생합니까? 어떤 아이디어? 또한 libstlport_shared에서 obps를 확인하기 위해 objdump를 수행했습니다. 나는 그들이 DDMS로 내 장치에 존재하고 libstlport_shared를로드하기 전에 명시 적으로 내 Java 코드에로드했다고 확인했습니다. 아무런 변화도 없었습니다. 미리 감사드립니다!

는 또한

이 질문에 두 번째, 선택적 구성 요소의 종류이다. 한 가지 해결책은 생각했지만 아직 시도하지는 않았지만 System.load (absolutePathToLibrary)를 사용하는 것이지만 java 내에서이 경로를 생성하는 방법을 찾을 수 없습니다. 분명한 이유는 하드 코딩을하고 싶지 않습니다. 다시 한 번 감사드립니다!

+0

비슷한 문제가 있습니다. 도와 주실 수 있습니까? http://stackoverflow.com/questions/11483078/library-stlport-shared-not-found-in-titanium-application – Mari

답변

2

그래, 나는 해결책을 찾은 것 같다. 기본적으로 stl 포트의 공유 버전을 사용하여 포기하고 정적으로 전환했습니다. 그런 다음 Application.mk 플래그를 사용하여 정적 버전을 다시 작성했습니다. STLPORT_FORCE_REBUILD := true

그러나 여전히 이상한 문제가있었습니다. 그것은 한 번 컴파일하고 잘 설치했습니다. 그럼 깨끗하고 recomplied 했어/배포하고 잘 건물을 마친 다음, 내 애플 리케이션 대화 상자에서 오류가 있었는지 말해 줄게 실제로 일식. 나는 일식을 종료하고, 그것을 다시 시작하고, 청소하고, 재건했다. 그리고 그것은 지금 모두 일한다. 최신 NDK에 버그/문제가있는 것처럼 보입니다. 예외가있는 전체 STL 포트를 사용할 경우 NDK r7로 수정 될 것입니다.

관련 문제