2010-11-30 13 views
1

私はNDKAndroidのリンクエラー

を使用していないのUbuntu 10.10

を実行している私は、DS-5(ARMの開発ツールセット、http://www.keil.com/arm/ds5/)で私のARM共有ライブラリをコンパイル。 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

LogCatである:ここでは

クラスですcodesourceryのようなビルド、特に互換性のあるフォーマットのオブジェクトファイルを生成しないgcc以外のコンパイラではない。

第2に、実験として代わりに完全なパス名をとるsystem.load()を試してみてください。しかし、あなたがndk gccを使用していない場合は、まだ問題に備えて準備しておいてください。

+0

私はNDKにOpenGL ESをビルドすることができないため、ndkの代わりに使用しています。 ARM自身がビルドをサポートしているので、バイナリに互換性があると思います。 – Prime

+0

異なるコンパイラの出力は一般に互換性がありません。ここでベアメタルのARMコアをターゲットにするわけではありません。あなたはアンドロイドランタイムリンカーとそれが動作するLinuxをターゲットにしています。私はアンドロイドが既にOpenGL ESを持っていると信じているので、おそらくあなたはそれからビルドシステム(またはそれ以上)をベビーベッドにすることができますか? –

+0

はTARGET_PLATFROM:= 'android-4'を変更する必要があります – NebulaFox