我的开发环境是: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() 运行良好。