Hi and thanks for practically the only guide online for how to do this!! I am having trouble with what I believe is a linker error. Though ndk-builder gives no errors for building libnonfree.so, I noticed with ls-la that the size of my file is much smaller than the one you provided pre-compiled (5088 bytes vs 460144 bytes for yours). libnonfree.so ndk-build output: nathan@nathan-lenovo:~/Downloads/nonfree_opencv_android/jni$ ../../android-ndk-r10c/ndk-build [armeabi] Prebuilt : libopencv_java.so <= /home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/../libs/armeabi/ [armeabi] SharedLibrary : libnonfree.so [armeabi] Install : libnonfree.so => libs/armeabi/libnonfree.so Application.mk: APP_ABI := armeabi #APP_ABI += armeabi-v7a # you can do either armeabi or armeabi-v7a, steps are the same. #APP_ABI += x86 APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_PLATFORM := android-19 Android.mk: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) OPENCV_INSTALL_MODULES:=on OPENCV_CAMERA_MODULES:=off include /home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk LOCAL_C_INCLUDES:= /home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/include LOCAL_MODULE := nonfree LOCAL_CFLAGS := -Werror -O3 -ffast-math LOCAL_LDLIBS += -llog # for 2.4.8, delete the line precomp.cpp \ LOCAL_SRC_FILES := nonfree_init.cpp \ precomp.cpp \ sift.cpp \ surf.cpp include $(BUILD_SHARED_LIBRARY) This is the output for the demo C++ app: nathan@nathan-lenovo:~/Downloads/sift_demo/sift_opencv_android$ ../../android-ndk-r10c/ndk-build [armeabi] Prebuilt : libopencv_java.so <= jni/ [armeabi] Install : libopencv_java.so => libs/armeabi/libopencv_java.so [armeabi] Prebuilt : libnonfree.so <= jni/ [armeabi] Install : libnonfree.so => libs/armeabi/libnonfree.so [armeabi] Compile++ thumb: test_sift <= test_sift.cpp [armeabi] Executable : test_sift /home/nathan/Downloads/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/test_sift/test_sift.o: in function .LTHUNK7:/home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/include/opencv2/nonfree/features2d.hpp:58: error: undefined reference to 'vtable for cv::SIFT' /home/nathan/Downloads/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/test_sift/test_sift.o: in function .LTHUNK7:/home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/include/opencv2/nonfree/features2d.hpp:58: error: undefined reference to 'VTT for cv::SIFT' /home/nathan/Downloads/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/test_sift/test_sift.o: in function main:jni/test_sift.cpp:39: error: undefined reference to 'cv::SIFT::SIFT(int, int, double, double, double)' /home/nathan/Downloads/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/test_sift/test_sift.o: in function main:jni/test_sift.cpp:47: error: undefined reference to 'cv::SIFT::SIFT(int, int, double, double, double)' collect2: ld returned 1 exit status make: *** [obj/local/armeabi/test_sift] Error 1 Application.mk: APP_ABI := armeabi #APP_ABI += armeabi-v7a APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_PLATFORM := android-19 Android.mk: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := sift_prebuilt LOCAL_SRC_FILES := libnonfree.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := opencv_java_prebuilt LOCAL_SRC_FILES := libopencv_java.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= /home/nathan/Downloads/OpenCV-2.4.9-android-sdk/sdk/native/jni/include/ LOCAL_MODULE := test_sift LOCAL_CFLAGS := -Werror -O3 -ffast-math LOCAL_LDLIBS += -llog -ldl LOCAL_SHARED_LIBRARIES := sift_prebuilt opencv_java_prebuilt LOCAL_SRC_FILES := test_sift.cpp include $(BUILD_EXECUTABLE)