我有一個「未定義的引用___」錯誤使用Android NDK。有很多像我這樣的SO問題,但沒有人幫助過我。我的主要問題可能是理解錯在哪裏,或者可能是我對Android.mk makefile命令的無知。無法解決「未定義的引用」錯誤構建Android NDK庫
這是運行ndk-build時的第一個輸出。注意libProcessor.so,函數調用圖片:: findTransform()在Image.cpp,當然還有未定義提及 '矩陣::矩陣(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類。起初,我曾爲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對象的聲明,但是我成功編譯Image時不知道我在哪裏爲Matrix構造函數添加了代碼。 CPP。「?
是'Matrix'在頭文件中完全定義?它看起來像你有'Matrix.cpp',你忘了添加到構建。 – 2014-10-02 20:28:37
那麼我修改LOCAL_SRC_FILES爲: LOCAL_SRC_FILES:= Processor.cpp Image.cpp newmat10/Matrix.cpp 我現在得到: 「make:***沒有規則使目標'jni/newmat10/Matrix.cpp' ,'obj/local/armeabi-v7a/objs/Processor/newmat10/Matrix.o'需要。停止。「這是一個進步嗎? – Alyoshak 2014-10-02 21:20:45
這不是一個前進的步驟。我剛纔發現Matrix類的定義分散在幾個文件中,比如newmat1.cpp,newmat2.cpp等。實際上沒有Matrix.cpp文件,所以我現在必須弄清楚如何讓makefile找到這些文件。即使我還沒有解決方案,你一定會幫助我理解問題。 – Alyoshak 2014-10-02 21:27:54