Eclipseに簡単なndkテストプロジェクトがあります。すべてのndk、jdk、android sdk、cygwin、およびeclipsecdtをインストールしました。
今私の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または設定のどこかにある1つのライナーですか?