NDK编译错误总结
2015-04-09 14:14
281 查看
Permission denied解决方案:先切换到/cygwin/工作目录/obj/local/armeabi/ 下,然后
Chmod –c 777 ./ ,再切换到jni目录下build.不行换:chmod -Rv 777 ./
如果库没有放进对应android项目的libs里,而使用了System.loadLibrary(“xx”);会报connot find library return null;
回调函数的参数如果是byte[],那么在jni层传递的应该是jbyteArray,而不是jcharArray,否则偶尔报错:~Channel is unrecoverably broken and will be disposed!
加载库的时候一定要注意加载顺序,可能会引发初始化AvcComm失败,或者Shutton Down JavaVM
jType类如何new出来后并没有回调回去,就是没有使用它就将它释放了会报空指针。
eg:Fatal signal 11 (SIGSEGV) at 0x00000074 (code=1)
要用到某个动态库的某个方法,必须要加载(System.loadLibrary)这个库,如果这个动态库和Java层有 native方法的关联,那么加载这个库的时候必须实现Java层的native方法(注意包名类名),如果没有加载这个动态库,会报异常(UnsatisfiedLinkError: Cannot load library),还有,这个动态库必需加载(loadLibrary)。 而静态库不需要加载,可以让动态库与本地方法关联,然后动态库调用静态库里的方法,这样Java层加载库时并不需要这个静态库,只需要加载那个动态库,调用那个动态库里的native方法。
LOCAL_LDLIBS += -L(call host-path,(LOCAL_PATH)/../lib_so) -lNDK_03
注解:找到当前mkfile文件的上层目录下的lib_so文件夹下的NDK_03库,将这个库包含进去
jni中包名带有“.”,例如:/data/data/com.duicky/luyao.txt”是正确的,而不是/data/data/com/duicky/luyao.txt
LOCAL_SRC_FILES中写源文件名称的时候,如果最后面的’\’后面有空格(看不见),编译报错:recipe commences before first target. 停止
如果找不到string,那么可以在android.mk里添加
LOCAL_LDLIBS := -lC
LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/stlport/stlport
NDK编译时找不到map头文件:新建Application.mk,在里面加入NDK_STL_INC 的设置。
13.编译时报错:找不到NDK里面公共基础库的方法。比如:
/stl/_string.c:600:error:undefined reference to ‘std::__stl_throw_length_error(char const*)’
需要修改Application.mk中的NDK_STL_INC和APP_STL。有两种:
14.编译时链接静态库后,运行报错,报静态库的错误,那就LOCAL_STATIC_LIBS,将静态库包含编译进去,不链接。
15. 临界区:XAutoLock l(m_secCmdBuffer);的起始为“{”,结束为”}”
Chmod –c 777 ./ ,再切换到jni目录下build.不行换:chmod -Rv 777 ./
如果库没有放进对应android项目的libs里,而使用了System.loadLibrary(“xx”);会报connot find library return null;
回调函数的参数如果是byte[],那么在jni层传递的应该是jbyteArray,而不是jcharArray,否则偶尔报错:~Channel is unrecoverably broken and will be disposed!
加载库的时候一定要注意加载顺序,可能会引发初始化AvcComm失败,或者Shutton Down JavaVM
jType类如何new出来后并没有回调回去,就是没有使用它就将它释放了会报空指针。
eg:Fatal signal 11 (SIGSEGV) at 0x00000074 (code=1)
要用到某个动态库的某个方法,必须要加载(System.loadLibrary)这个库,如果这个动态库和Java层有 native方法的关联,那么加载这个库的时候必须实现Java层的native方法(注意包名类名),如果没有加载这个动态库,会报异常(UnsatisfiedLinkError: Cannot load library),还有,这个动态库必需加载(loadLibrary)。 而静态库不需要加载,可以让动态库与本地方法关联,然后动态库调用静态库里的方法,这样Java层加载库时并不需要这个静态库,只需要加载那个动态库,调用那个动态库里的native方法。
LOCAL_LDLIBS += -L(call host-path,(LOCAL_PATH)/../lib_so) -lNDK_03
注解:找到当前mkfile文件的上层目录下的lib_so文件夹下的NDK_03库,将这个库包含进去
jni中包名带有“.”,例如:/data/data/com.duicky/luyao.txt”是正确的,而不是/data/data/com/duicky/luyao.txt
LOCAL_SRC_FILES中写源文件名称的时候,如果最后面的’\’后面有空格(看不见),编译报错:recipe commences before first target. 停止
如果找不到string,那么可以在android.mk里添加
LOCAL_LDLIBS := -lC
LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/stlport/stlport
NDK编译时找不到map头文件:新建Application.mk,在里面加入NDK_STL_INC 的设置。
APP_BUILD_SCRIPT := $(call my-dir)/Android.mk APP_MODULES := shortcut_key_server NDK_PATH := /cygdrive/d/android-ndk-r8d/ndk-build NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include APP_OPTIM := release APP_CFLAGS += -O3 APP_STL := stlport_static APP_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);的起始为“{”,结束为”}”
相关文章推荐
- Webkit在Windows上编译时的错误总结
- 我的笔记---编译错误原因及其他一些总结
- Wince6.0编译错误经验总结
- ubuntu12.04编译android-4.0.1_r1错误总结
- VC 编译链接错误总结
- android源码编译错误总结
- Unix C 常见编译错误总结(持续更新)
- Qtopia2 编译过程错误总结与解决方法
- NDK编译错误:make: *** 没有规则可以创建。。。
- FFmpeg/ffplay for VC 编译错误总结
- Linux 内核编译过程常遇到的错误总结
- 关于PHP一些编译安装出现的错误总结
- Keil C51编译错误总结
- linux设备驱动程序 源码 2.6 内核编译错误总结
- linux 内核编译错误总结
- [经验总结] 用VIM的缩进功能解决一个编译错误
- Keil C51 编译错误总结
- 编译错误总结
- Ubuntu12.04LTS 编译android 错误总结
- NDK编译错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token