NDK编译错误总结

来源:互联网 发布:app借款软件排行 编辑:程序博客网 时间:2024/06/09 13:55
  1. Permission denied解决方案:先切换到/cygwin/工作目录/obj/local/armeabi/ 下,然后
    Chmod –c 777 ./ ,再切换到jni目录下build.不行换:chmod -Rv 777 ./
  2. 如果库没有放进对应android项目的libs里,而使用了System.loadLibrary(“xx”);会报connot find library return null;
  3. 回调函数的参数如果是byte[],那么在jni层传递的应该是jbyteArray,而不是jcharArray,否则偶尔报错:~Channel is unrecoverably broken and will be disposed!
  4. 加载库的时候一定要注意加载顺序,可能会引发初始化AvcComm失败,或者Shutton Down JavaVM
  5. jType类如何new出来后并没有回调回去,就是没有使用它就将它释放了会报空指针。
    eg:Fatal signal 11 (SIGSEGV) at 0x00000074 (code=1)
  6. 要用到某个动态库的某个方法,必须要加载(System.loadLibrary)这个库,如果这个动态库和Java层有 native方法的关联,那么加载这个库的时候必须实现Java层的native方法(注意包名类名),如果没有加载这个动态库,会报异常(UnsatisfiedLinkError: Cannot load library),还有,这个动态库必需加载(loadLibrary)。 而静态库不需要加载,可以让动态库与本地方法关联,然后动态库调用静态库里的方法,这样Java层加载库时并不需要这个静态库,只需要加载那个动态库,调用那个动态库里的native方法。
  7. LOCAL_LDLIBS += -L(LOCAL_PATH)/../lib_so) -lNDK_03
    注解:找到当前mkfile文件的上层目录下的lib_so文件夹下的NDK_03库,将这个库包含进去
  8. jni中包名带有“.”,例如:/data/data/com.duicky/luyao.txt”是正确的,而不是/data/data/com/duicky/luyao.txt
  9. LOCAL_SRC_FILES中写源文件名称的时候,如果最后面的’\’后面有空格(看不见),编译报错:recipe commences before first target. 停止
  10. 如果找不到string,那么可以在android.mk里添加
    LOCAL_LDLIBS := -lC
    LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/stlport/stlport

  11. NDK编译时找不到map头文件:新建Application.mk,在里面加入NDK_STL_INC 的设置。

APP_BUILD_SCRIPT := $(call my-dir)/Android.mkAPP_MODULES := shortcut_key_server NDK_PATH := /cygdrive/d/android-ndk-r8d/ndk-buildNDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/includeAPP_OPTIM        := release APP_CFLAGS       += -O3APP_STL := stlport_staticAPP_PLATFORM := android-9 

13.编译时报错:找不到NDK里面公共基础库的方法。比如:
/stl/_string.c:600:error:undefined reference to ‘std::__stl_throw_length_error(char const*)’
需要修改Application.mk中的NDK_STL_INC和APP_STL。有两种:

①:NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/stlport/stlport          APP_STL := stlport_static②:NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/4.6/include          APP_STL := gnustl_shared

14.编译时链接静态库后,运行报错,报静态库的错误,那就LOCAL_STATIC_LIBS,将静态库包含编译进去,不链接。
15. 临界区:XAutoLock l(m_secCmdBuffer);的起始为“{”,结束为”}”

0 0
原创粉丝点击