2010-11-30 2 views
1

나는 우분투 10.10안드로이드 링크 오류

을 실행하는거야 내가 NDK

내가 DS-5에 내 ARM 공유 라이브러리를 컴파일

(ARM 개발 도구 세트, http://www.keil.com/arm/ds5/)를 사용하지 않는. libs/armeabi 아래에 그들을 배치하고 System.loadLibrary()를 호출하면 찾을 수 없습니다.

11-30 04:54:11.273: ERROR/AndroidRuntime(372): FATAL EXCEPTION: main 
11-30 04:54:11.273: ERROR/AndroidRuntime(372): java.lang.ExceptionInInitializerError 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at org.me.testds5.TestDS5.onCreate(TestDS5.java:13) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.os.Looper.loop(Looper.java:123) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at dalvik.system.NativeStart.main(Native Method) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372): Caused by: java.lang.UnsatisfiedLinkError: Library AddSub not found 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at java.lang.Runtime.loadLibrary(Runtime.java:461) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at java.lang.System.loadLibrary(System.java:557) 
11-30 04:54:11.273: ERROR/AndroidRuntime(372):  at org.me.testds5.WrapMyNative.<clinit>(WrapMyNative.java:7) 

답변

1

첫째, 당신이 정말로 다른 GCC보다는 NDK를 사용한다 :

package org.me.testds5; 

//a JNI wrapper class 
public class WrapMyNative 
{ 
    static 
    { 
      //ERROR HERE 
      //note that calling 
      //System.loadLibrary("libAddSub"); generates the same error 
     System.loadLibrary("AddSub"); 
    } 

    //some native functions 
    public native int add(int a, int b); 
    public native int sub(int n, int m); 

} 

라이브러리의 정확한 이름은 libAddSub.so

로그 캣입니다 : 여기

는 클래스의 codesourcery와 같은 빌드, 특히 호환되지 않는 형식의 오브젝트 파일을 생성하지 않는 gcc가 아닌 컴파일러가 아닙니다.

둘째, 전체 경로 이름을 사용하는 대신 system.load()를 사용해보십시오. 그러나 당신이 ndk gcc를 사용하지 않는다면 여전히 문제를 대비하십시오.

+0

NDK에서 OpenGL ES를 빌드 할 수 없어서 ndk 대신 사용할 수 있습니다. ARM 자체가 빌드를 지원하므로 바이너리가 호환 될 것이라고 생각합니다 – Prime

+0

다른 컴파일러의 출력은 일반적으로 호환되지 않습니다. 여기서 베어 메탈 ARM 코어를 타겟으로하지 않으므로, 당신은 안드로이드 런타임 링커와 그것이 실행되는 리눅스를 타겟으로 삼고 있습니다. 나는 안드로이드가 이미 OpenGL ES를 가지고 있다고 믿는다. 그렇다면 아마도 당신은 그 시스템을 구축 할 수있을 것이다. –

+0

은 TARGET_PLATFROM : = 'android-4'를 변경해야합니다. – NebulaFox