Android NDK学习(7)NDK测试时遇到的问题:C与C++互相调用
2014-02-18 11:02
726 查看
贴代码:
test.h
test.c
com_ycan_ycantestlib.h
com_ycan_ycantestlib.cpp
Android.mk
这是c++调用c的情况,解决问题的关键就是com_ycan_ycantestlib.cpp中的这段:
反过来,也是一样的,需要注意的是这段只能加在c++代码中。
test.h
int adds(int a,int b); int subs(int a,int b);
test.c
#include "test.h" int adds(int a,int b) { return (a-b); } int subs(int a,int b) { return (a+b); }
com_ycan_ycantestlib.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_ycan_ycantestlib */ #ifndef _Included_com_ycan_ycantestlib #define _Included_com_ycan_ycantestlib #ifdef __cplusplus extern "C" { #endif /* * Class: com_ycan_ycantestlib * Method: add * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_add (JNIEnv *, jobject, jint, jint); /* * Class: com_ycan_ycantestlib * Method: sub * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_sub (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus } #endif #endif
com_ycan_ycantestlib.cpp
include "com_ycan_ycantestlib.h" #ifdef __cplusplus extern "C" { #endif #include "test.h" #ifdef __cplusplus } #endif JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_add (JNIEnv *evn, jobject thiz, jint a, jint b) { int c =adds(a,b); return c; } JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_sub (JNIEnv *evn, jobject thiz, jint a, jint b) { int c =subs(a,b); return c; }
Android.mk
#Android.mk和需要编译的源文件在同一目录下 # LOCAL_PATH:= $(call my-dir) #源文件列表 # common_SRC_FILES :=\ test.c \ com_ycan_ycantestlib.cpp #头文件列表 # common_C_INCLUDES :=\ test.h \ com_ycan_ycantestlib.h #模块开始 # include $(CLEAR_VARS) #源文件列表 # LOCAL_SRC_FILES := $(common_SRC_FILES) #头文件列表 # LOCAL_C_INCLUDES += $(common_C_INCLUDES) #生成的程序名 # LOCAL_MODULE:= com_ycan_ycantestlib #此处有三个选择:可执行程序,动态库,静态库 # include $(BUILD_SHARED_LIBRARY)
这是c++调用c的情况,解决问题的关键就是com_ycan_ycantestlib.cpp中的这段:
#ifdef __cplusplus extern "C" { #endif #include "test.h" #ifdef __cplusplus } #endif
反过来,也是一样的,需要注意的是这段只能加在c++代码中。
相关文章推荐
- Android NDK学习(7)NDK测试时遇到的问题:C与C++互相调用
- C#调用C++Dll封装时遇到的一系列问题
- C++ 调用C 文件遇到的编译问题
- c++学习连载-插入排序及其遇到的问题
- c#调用c/c++ 动态库时遇到unsigned char * 的转换问题
- 学习C++ GUI Programming with Qt 4遇到的问题(1)
- C++ 学习拾遗 —— 点滴记录C++学习过程中遇到的问题以及整理
- c++基础编程函数调用时遇到的问题
- Golang学习之同一个package中函数互相调用的问题
- Android JNI里c++调用java时遇到的FindClass返回0的问题
- [寒江孤叶丶的Cocos2d-x之旅_25]Cocos2d-x 浅谈Lua与C++函数间互相调用问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题【转】
- Spring学习笔记(二十一):使用阿里云OSS的javaSDK时遇到的问题(附:测试代码)
- 关于struts2.5.2 初步学习 遇到的几点改变以及使用通配符调用无效的问题
- Android studio 调试NDK C++ 代码,遇到的问题
- C#调用C++Dll封装时遇到的一系列问题
- C++学习中遇到的问题及其解决方案
- 关键词:Android ┊ 来源: 原创 ┊ 收藏 如果您遇到任何问题,都可以到本站的[音速知道]中提问,互相学习,有问必答!
- C#调用C++Dll封装时遇到的一系列问题(2)