Android NDK提供了对各种现有方法的未定义引用

时间:2012-12-03 05:16:01

标签: android android-ndk native-code

我已将Android.mk定义如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_SRC_FILES := optplugin.c \
                   optionobjclass.c \


LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
LOCAL_MODULE:= optplugin
include $(BUILD_SHARED_LIBRARY)

optplugin.c文件抛出许多对optionobjclass.c中实现的方法的未定义引用。

我会感激任何帮助。

optplugin.c中的声明:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//#include "pluginHelp.h"
#include "npapi.h"
#include "npruntime.h"
//#include "npupp.h"
#include "mcvdebug.h"
//#include "jritypes.h"
//#include "gogi_plugin_api.h"          /* GOGI Deprecated */
#include "optionobjclass.c"
#include "optionsClass.h"
#include "IOlsOptionObject.h"
#include "npunix.c"
#define TRACESYMBOL(...) extern int a;
#define TraceDebug(m, ...) printf(__VA_ARGS__)

#define TRUE 1
#define FALSE 0

2 个答案:

答案 0 :(得分:3)

由于您多次编译optionobjclass.c,因此会出现多个定义错误。

  

LOCAL_SRC_FILES:= optplugin.c \

                  optionobjclass.c \

  

#include“optionobjclass.c”

当您包含源文件时,将编译源文件。解决方案是从optionobjclass.c移除LOCAL_SRC_FILES

但更好的方法是从optionobjectclass.h制作文件optionobjclass.c并包含标题。

答案 1 :(得分:0)

尝试添加C PLUS PLUS标志,如果存在任何c ++代码,它可能正在使用c ++编译器。

#ifdef __cplusplus
extern "C" {
#endif


#ifdef __cplusplus
}
#endif