我的发展环境是: 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()运行良好。
答案 0 :(得分:0)
inline
函数add
似乎有问题。
在编译HAVE_INLINE
之前,您需要head.h
。您可以在编译选项中使用-D HAVE_INLINE
来定义它。