我的C代码中调用到了另外一个库的函数,在Linux的Makefile中可以很简单的通过-L和-l来引用这个库,但在Android平台上使用NDK如何添加这种引用关系?
我试着在Android.mk中添加
LOCAL_LDLIBS := -lmylib
并将libmylib.a放到jni目录下,可ndk-build的时候总是提示cannot find -lmylib,我试着用-L添加绝对路径,还是不行。我刚开始用NDK,请问哪位同学能帮我解答一下这个问题,谢谢!

解决方案 »

  1.   

    把.a库文件放到 ANDROID_NDK_ROOT下的交叉编译工具的libs下,试试能不能连接到
      

  2.   

    回楼上的两位,我试了一下,还是不行。
    我用的版本是NDK r7,安装路径是
    D:\Android\android-ndk-r7\
    交叉编译工具的lib目录的路径就是
    D:\Android\android-ndk-r7\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\lib
    我用的第三方库既有动态库又有静态库,我分别把这两种库放到这个目录下,编译的时候还是提示找不到。会不会是我理解的路径有问题,不是这个目录?
      

  3.   

      问题解决,我把用到的库放到系统的库文件目录下,编译通过。  我原来对系统库文件目录的理解确实是不对的,库文件的目录应该是ANDROID_NDK_ROOT\platforms\android-3\arch-arm\usr\lib,而不是ANDROID_NDK_ROOT\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\lib,后者应该是交叉编译器的库文件目录。运行的时候程序依赖的库文件应该是在目标设备的/usr/lib目录下。
      但这个地方还有个问题,我安装的是NDK r7,platforms目录下除了android-3还有4、5、8、9、14,每个目录下都分为arch-arm和arch-x86,但为什么只有放在android-3\arch-arm的库文件目录下才可以,其他的都不可以?我在Android.mk和NDK的参数中都没有指定版本,默认就是使用最低版本吗?那么我应该如何指定我要支持的版本呢?比如我编译的库要用在Android 3.2上,Android API的级别应该是13,那在NDK的编译中我应该如何指定呢?
      在这方面我还是个新手,希望能有内行帮我解答一下。谢谢!  另外这里有个NDK调用动态库的资料,虽然没有解答我的疑问,但还是挺有用的,贴出来与广大新手分享。
      http://www.cnblogs.com/zhangweia/archive/2010/09/16/1828176.html
      

  4.   

    你用的第三方lib是用ndk编译的么?
      

  5.   


    请问你是在windows下,用cygwin通过ndk-build编译的吗?我的编译C++库会有各种错误,说是找不到fstream no such file or directory
      

  6.   


    麻烦帮我看看这个帖子吧
    http://topic.csdn.net/u/20120217/14/477c355e-5117-4e3c-aa1e-2c24ab6fabc5.html