小弟最近需要把某开源库移植到android上去,使用NDK来编译本地代码,但是在代码的编译过程中出了一个这样的错误,还请各位不啬赐教。
      当NDK编译本地代码的时候,需要使用两个系统的头文件 stdlib.h 和 unistd.h,在代码编译的时候报错如下:
       error: 'getlogin_r' was not declared in this scope
      观察NDK 中platforms文件夹里的内容发现,include目录下这个两个头文件都有,所以我考虑出错的原因是没有包含相关的库,也就是在ANdroid.mk文件下  LOCAL_LDLIBS    := -lc   应该包含相关的库。但是我找了一圈都没有发现相关的库。请问那位知道能告诉我一下,谢谢各位了。
    
    PS:我使用的ndk版本是android-ndk-r5,我所需要移植开源库是 jrtplib3.9.0     再次谢谢各位了

解决方案 »

  1.   

    这个错误是未声明,跟"LOCAL_LDLIBS := -lc"无关,-l是链接
    inlcude目录下有,那么:
    1、你代码有没有 #include <unistd.h>?
    2、make文件的include路径对不对?(不过这个可能性比较低,毕竟那是系统头文件)
    3、最大可能,getlogin_r是C的函数,而你是cpp的文件
      

  2.   

    谢谢你的回复,我确实是Cpp的文件,但是在jrtplib库中原代码也是Cpp的而且也引用了
    #include <unistd.h>为什么源代码就没问题呢?
      

  3.   

    谢谢回复
    可是并没有 extern C...
      

  4.   

    你试下,把原来的 #include <unistd.h> 改成
    extern "C"
    {
    #include <unistd.h>
    }