東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

android NDK 02 使用问题

2014年7月14日星期一



改正twolib的例子

运行的时候报
  1. /home/senrsl/android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/objs/sum-main/sum_main.o: in function Java_dc_test_hey_activity_TestNdkTwoLibActivity_add:jni/sum_main.c:13: error: undefined reference to 'sum'
  2. collect2: ld returned 1 exit status
  3. make: *** [obj/local/armeabi-v7a/libsum-main.so] Error 1
重点:collect2: ld returned 1 exit status
百度,这个是
链接错误。
链接器找到了函数的声明,但没有找到实现。
也就是说,然后找Android.mk
漏下了对静态库的引用

这样就可以编译通过了
--------------------------------------------------
然后,运行于虚拟机时,报错
  1. 07-09 23:08:58.780: E/AndroidRuntime(1480): java.lang.UnsatisfiedLinkError: Couldn't load libsum-main from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/dc.test.hey-1.apk"],nativeLibraryDirectories=[/data/app-lib/dc.test.hey-1, /vendor/lib, /system/lib]]]: findLibrary returned null
  2. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at java.lang.Runtime.loadLibrary(Runtime.java:358)
  3. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at java.lang.System.loadLibrary(System.java:526)
  4. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at dc.test.hey.activity.TestNdkTwoLibActivity.onCreate(TestNdkTwoLibActivity.java:41)
  5. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.Activity.performCreate(Activity.java:5231)
  6. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
  7. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
  8. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
  9. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
  10. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
  11. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.os.Handler.dispatchMessage(Handler.java:102)
  12. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.os.Looper.loop(Looper.java:136)
  13. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at android.app.ActivityThread.main(ActivityThread.java:5017)
  14. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at java.lang.reflect.Method.invokeNative(Native Method)
  15. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at java.lang.reflect.Method.invoke(Method.java:515)
  16. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
  17. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
  18. 07-09 23:08:58.780: E/AndroidRuntime(1480):     at dalvik.system.NativeStart.main(Native Method)
这是因为
android.mk里定义为
LOCAL_MODULE    := libsum-main
然后生成的文件都是libsum-main.so
load时直接这样
    System.loadLibrary("libsum-main");
把lib去掉,改成这样就好了
    System.loadLibrary("sum-main");
说明,这个取得不是android.mk里的module,那个文件只是用来编译。。。。
------------------------------------
make: *** No rule to make target `/home/senrsl/android/android-ndk-r9d/sources/android/native_app_glue/plasma.c', needed by `obj/local/armeabi-v7a/objs/plasma/plasma.o'.  Stop.
解决方法

-----------------------------------------------------------------

jni/audio.c:26:24: fatal error: hello_clip.h: No such file or directory
compilation terminated.
make: *** [obj/local/armeabi-v7a/objs/audio/audio.o] Error 1
顾名思义,里面文件引用写错名了
-----------------------------------------------------------------
/home/senrsl/android/workspace/tech/FiveHalo/Debug/../halo.c:131: multiple definition of `main'
./c_primer_plus.o:/home/senrsl/android/workspace/tech/FiveHalo/Debug/../c_primer_plus.c:7: first defined here
collect2: ld 返回 1
make: *** [FiveHalo] 错误 1
定义了多个入口。。。。
--------------------------------------
2014-07-14 14:3
--
senRsl
2014-07-10 11:04
GMT+8 @Beijing Tongzhou

没有评论 :

发表评论