在使用ndk开发动态库时,已经实现了英文字符串的传递,但中文字符串传递失败
按照网上找到的资料使用iconv.h头文件中提供的编码转换函数时,编译时出现错误,提示 无法找到iconv.h头文件cygwin环境是完整安装的,ndk是使用的r4版本,请问这种问题是否有人遇到过,要怎么解决呢,在线等,谢谢!

解决方案 »

  1.   

    谁知道在Windows cygwin环境下编译Android ndk动态库, 中查找头文件时是默认从哪个目录开始找起,其相对应的资源文件是放在什么位置的
      

  2.   

    我记得做JNI的时候中文字符串是要通过UTF转码的
      

  3.   


    能说的详细点吗? 刚开始做,需要转换的编码不止中文,总共有二十来种语言,10种左右的编码需要转换!但目前在网上找的资料都说在windows cygwin环境下直接包含 iconv.h 头文件即可使用其中的函数,但该头文件包含并不成功。
      

  4.   

    可以搜索一下你的ndk里有没有iconv.h这个文件
      

  5.   

    在cygwin的编译环境下可以搜到两个该文件,安装的时候也是全部都安装了,但仍旧是无法找到,如果使用绝对路径的话可以找到该文件但会出现一堆的错误。所以想知道的是
    Windows cygwin环境下编译Android ndk动态库, 查找头文件时是默认从哪个目录开始找起,其相对应的资源文件是放在什么位置的
    或者libiconv这个资源要怎么样才能知道是否正确安装了?
      

  6.   

    在cygwin的编译环境下可以搜到两个该文件,安装的时候也是全部都安装了,但仍旧是无法找到,如果使用绝对路径的话可以找到该文件但会出现一堆的错误。所以想知道的是
    Windows cygwin环境下编译Android ndk动态库, 查找头文件时是默认从哪个目录开始找起,其相对应的资源文件是放在什么位置的
    或者libiconv这个资源要怎么样才能知道是否正确安装了?
      

  7.   

    Android ndk 中未公开icu4c库,但可以直接使用libicuuc.so;#define DECL_FUNC(name) static name##_t name = 0
    DECL_FUNC(ucnv_convert);{
     void* pDL = dlopen("/system/lib/libicuuc.so", RTLD_LAZY);
     #define LD_FUNC(name) name = (name##_t)dlsym(pDL, #name"_44");
     LD_FUNC(ucnv_convert);
     finalize();
    }
      

  8.   

    谢谢楼上的回复,我现在的解决方案是在c语言中返回字节码串 byte[],然后在Java中使用String的初始化函数进行编码转换,测试正常楼上的自己打开动态库的方法我会进行测试的,非常感谢! 结贴
      

  9.   

    ndk里面没有iconv库吧。可以自己编译一个
      

  10.   

    楼主,你的问题解决了吗?   iconv怎么转安卓啊。!!!