У меня есть «неопределенная ссылка на ___» с использованием Android NDK. Есть немало вопросов, подобных мне, но ни один из них не помог мне. Моей главной проблемой может быть понимание того, что не так, или может быть мое незнание команд make.mp3.mk.Невозможно решить проблему «неопределенной ссылки на», создав библиотеку Android NDK
Это первый выход, когда я запускаю ndk-build. Обратите внимание libProcessor.so, вызов функции Image :: findTransform() в Image.cpp, и, конечно, неопределенная ссылка на 'Matrix :: Matrix (Int, Int)':
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 15 in ./AndroidManifest.xml
[armeabi-v7a] SharedLibrary : libProcessor.so
/Applications/adt-bundle-mac-x86_64-20140702/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/objs/Processor/Image.o: in function Image::findTransform(float, float, CGPoint, CGPoint, CGPoint, CGPoint, float&, float&, float&, float&, float&, float&, float&, float&):jni/Image.cpp:1230: error: undefined reference to 'Matrix::Matrix(int, int)'
строки коды она жалуется является простым:
Matrix A(8,8);
это Матрица класса в файле исходного кода, а не библиотеки предварительно построенном. Сначала у меня были ошибки компиляции для класса Matrix, но после включения файла newmat10.h они все ушли, поэтому я знаю, что каталог newmat10 находится и весь его исходный код. Так вот что меня озадачивает: файл исходного кода, который определяет класс Matrix, встроен в libProcessor.so прямо вместе с кодом Image.cpp, который его вызывает, так что еще нужно знать для разрешения ссылки? Возможно, проблема в моем Android.mk файл, который находится здесь:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Processor
LOCAL_SRC_FILES := Processor.cpp Image.cpp
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/newmat10 \
include $(BUILD_SHARED_LIBRARY)
мне особенно нужно исправление этой ошибки, конечно, но я бы тоже очень хотелось бы понять его специфику. Не говорит ли система: «Теперь я пытаюсь написать объектный файл Image.o, и я вижу объявление объекта Matrix, но я не знаю, где я поместил код для конструктора Matrix, когда я успешно скомпилировал Image. каст. "?
Является 'Matrix' полностью определен в заголовочном файле? Похоже, у вас есть 'Matrix.cpp', который вы забыли добавить в сборку. –
Ну я изменил LOCAL_SRC_FILES быть: LOCAL_SRC_FILES: = Processor.cpp Image.cpp newmat10/Matrix.cpp и теперь я получаю: «сделать: *** Нет правила, чтобы сделать цель' JNI/newmat10/Matrix.cpp» , требуемый 'obj/local/armeabi-v7a/objs/Processor/newmat10/Matrix.o '. Остановить." Это шаг вперед? – Alyoshak
Это не шаг вперед. Я просто понял, что определение класса Matrix разбросано по нескольким файлам, таким как newmat1.cpp, newmat2.cpp и т. Д. На самом деле нет файла Matrix.cpp, поэтому теперь я должен выяснить, как получить make-файл найти эти файлы. Вы определенно помогли мне понять проблему, даже если у меня пока нет решения. – Alyoshak