Android NDK Jni 开发C和C++的区别

 我来答
huanglenzhi
2015-07-08 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517199
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  由于Android官方NDK例子大多使用C语言编写,所以当我们想用C++进行开发时,会出现种种错误。下面简单说说几点不同之处:
  
  1.先来一个用C写的例子:
  
  (1)hello.c文件。在C中没有引用,传递的env是个两级指针,用(*env)->调用方法且方法中要传入env.
  
  1 #include <jni.h>
  2
  3 jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) {
  4 return (*env)->NewStringUTF(env,"Hello Jni---->C!");
  5 }
  (2)Android.mk文件,更改后缀名为.c
  
  1 LOCAL_PATH := $(call my-dir)

  2
  3 include $(CLEAR_VARS)
  4
  5 LOCAL_MODULE := hello
  6 LOCAL_SRC_FILES := hello.c
  7
  8 include $(BUILD_SHARED_LIBRARY)
  2.再来一个用C++写的例子:

  
  (1)hello.cpp文件。C++中env为一级指针,用env->调用方法,无需传入env;C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern "C"进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名;exter "C"{jni代码}。
  
  1 #include <jni.h>

  2
  3 #ifdef __cplusplus
  4 extern "C" {
  5 #endif
  6 jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) {
  7 return env->NewStringUTF("Hello Jni---->C++!");
  8 }
  9 #ifdef __cplusplus
  10 }
  11 #endif
  (2)Android.mk文件,更改后缀名为.cpp

  
  1 LOCAL_PATH := $(call my-dir)

  2
  3 include $(CLEAR_VARS)
  4
  5 LOCAL_MODULE := hello
  6 LOCAL_SRC_FILES := hello.cpp
  7
  8 include $(BUILD_SHARED_LIBRARY)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式