NDK c 文件引用c++ 函数

来源:互联网 发布:淘宝卖的100多充气娃娃 编辑:程序博客网 时间:2024/06/14 02:39

问题:

       由于之前编译的NDK 文件全部是.cpp 结尾,所以未曾出现c引用c++的函数的问题,最近由于要搞播放器,没办法很多之前的播放器都是c写的。


分析:

<1> NDK中默认的编译器应为gcc,如果是g++相信不存在.c 文件引用c++的一些特性出错的问题,比如#include <string>

因为g++ 把.c .cpp 结尾文件全部当做c++来编译,所以之后的所以就是没问题。


<2>鉴于是gcc,对于.c的文件会按照c来编译,所以#include <string > ,class ,namespace 都不被识别,因为c里根本没有这个;

而对于cpp文件,gcc会按照c++ 来编译,所以c++的特性都可以使用。


<3>所以之后的所以,如果在.cpp文件中定义 jni的函数,需要加上 extern "C"  ,如     

   extern "C"

   JNIEXPORT jint JNICALL Java_com_xxxxx_yyyyy_Native_start(JNIEnv *env, jclass class)


 因.cpp 编译时会定义__cplusplus 宏,所以可更改为如下

  #ifdef __cplusplus
     extern "C" {
  #endif

             JNIEXPORT jint JNICALL Java_com_xxxxx_yyyyy_Native_start(JNIEnv *env, jclass class)

  #ifdef __cplusplus
     }
  #endif

而对于.c文件这些就不需要了。

<4> 回归主题,如果需要c 调用c++ 函数,首先c++的头文件中不能包含c所没有的特性,其次所有提供的函数需要加上 extern "c"




如不正确,欢迎各位方家指正!!!!










0 0
原创粉丝点击