未定义的myfunction参考

时间:2013-09-28 08:33:26

标签: android c++ android-ndk

我的发展环境是: 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文件中。 我不知道为什么会出现错误,但是函数ad()运行良好。

1 个答案:

答案 0 :(得分:0)

inline函数add似乎有问题。

在编译HAVE_INLINE之前,您需要head.h。您可以在编译选项中使用-D HAVE_INLINE来定义它。