1

我的开发环境是:Windows7 + eclsipse + ADT + CDT + NDK(最新版)

头文件代码:

#ifndef HEAD_H_
#define HEAD_H_

#ifdef HAVE_INLINE
#  if defined(__GNUC_STDC_INLINE__) || defined(GSL_C99_INLINE) ||       defined(HAVE_C99_INLINE)
#    define INLINE_DECL inline  /* use C99 inline */
#    define INLINE_FUN inline
#  else  /*the part real work, since I have define HAVE_INLINE */
#    define INLINE_DECL         /* use GNU extern inline */
#    define INLINE_FUN extern inline 
#  endif
#else
#  define INLINE_DECL /* */
#endif
extern "C" {
INLINE_DECL double add(int x, int y);

#ifdef HAVE_INLINE
INLINE_FUN double add(int x, int y) {
return x+y;
}
#endif

extern inline double ad(int x, int y) {
return x-y;
 }
}
#endif /* HEAD_H_ */

cpp文件是:

#include <jni.h>
#include <android/log.h>
#include <head.h>
#include <string.h>
#include <iostream>
#include <sstream> 
#define  LOG_TAG    "OCV:libnative_activity"

#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#ifdef __cplusplus
  extern "C" {
#endif

jstring
Java_com_igit_testcinline_MainActivity_main(JNIEnv* env, jobject thiz){
    double c = add(1,2);  /*Error, undefined reference to 'add'*/
    double d = ad(2,1);
        .....

当我使用 NDK make 时,cpp 文件中会出现错误“未定义对 'add' 的引用”。我不知道为什么会发生错误,但函数 ad() 运行良好。

4

0 回答 0