我在 Eclipse 中有一个简单的 ndk 测试项目。我已经安装了所有 ndk、jdk、android sdk、cygwin 和 eclipse cdt。
现在我的 android.mk 文件指向它编译的 main.cpp:
#include "test.h"
int main (int argc, char **argv) {
test* x = new test();
x->myTest();
}
但抱怨说:
C:\Development\Android\Test/jni/main.cpp:18: undefined reference to `test::test()'
C:\Development\Android\Test/jni/main.cpp:19: undefined reference to `test::myTest()'
即使我有一个 test.cpp 的实现,如下所示:
#include "test.h"
test::test() {
// TODO Auto-generated constructor stub
}
test::~test() {
// TODO Auto-generated destructor stub
}
int test::myTest() {
#error "this comes from test"
return 5;
}
并且test.h文件声明了这样的函数(找到了声明,只是c ++文件从未编译过):
#ifndef TEST_H_
#define TEST_H_
class test {
public:
test();
virtual ~test();
int myTest();
};
#endif
这是我的 Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := main.cpp
include $(BUILD_SHARED_LIBRARY)
除非我在我的 Android.mk 的本地源文件中指定类 test.cpp,否则编译器永远不会看到 test.cpp 中的 #error:
LOCAL_SRC_FILES := main.cpp test.cpp
我有一个包含数千个类的大项目,我需要将它们移植到 Android,但我无法在其中指定每个文件。为了使编译器正常工作,我可能缺少什么?如何告诉编译器自动使用我的 jni 文件夹中的所有类?它可能只是 Android.mk 或设置中的某个地方的一个衬里?