Problems with opencv libraries

This forum is about all development around libVLC.
gmv
Blank Cone
Blank Cone
Posts: 15
Joined: 18 Feb 2013 18:46

Problems with opencv libraries

Postby gmv » 31 Jul 2013 11:57

Hi,
I'm working with VLC for Android, and i've compiled it to get a project in Eclipse.
I'm trying to develope a new module which it uses the header files of opencv.

I've implemented a .c program in the folder home/virginia/workspace/android/vlc/input and its header file.
In the begining of the program, i've included the next headers:

Code: Select all

#include <opencv2/core/core_c.h> #include <opencv2/imgproc/imgproc_c.h> #include <opencv2/imgproc/types_c.h> #include <opencv2/highgui/highgui_c.h> #include <opencv2/photo/photo_c.h>

But i'm not sure where to indicate to the compiler that the libraries and the headers file are located. I've included the next instructions in the configure.sh file (home/virginia/workspace/android/configure.sh):

Code: Select all

CPPFLAGS="-I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++${CXXSTL}/include -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++${CXXSTL}/libs/${ANDROID_ABI}/include -I/home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/include " LDFLAGS="$LDFLAGS -L${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++${CXXSTL}/libs/${ANDROID_ABI} -L/home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/${ANDROID_ABI}"
So the headers are located in the next path: home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/include in the folders opencv and opencv2 and the libraries (.so and .a) are located in the next path:/home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/${ANDROID_ABI}

The errors that i'm getting are :

Code: Select all

/home/virginia/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function virtualJNI:../../src/input/virtual.c:103: error: undefined reference to 'cvGetSize' /home/virginia/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function virtualJNI:../../src/input/virtual.c:103: error: undefined reference to 'cvCreateImage' /home/virginia/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function virtualJNI:../../src/input/virtual.c:103: error: undefined reference to 'cvCloneImage'

I know that it's a problem related with to link libraries, but i don't know that file or files i must modify.

Thanks for the help!

Jean-Baptiste Kempf
Site Administrator
Site Administrator
Posts: 37523
Joined: 22 Jul 2005 15:29
VLC version: 4.0.0-git
Operating System: Linux, Windows, Mac
Location: Cone, France
Contact:

Re: Problems with opencv libraries

Postby Jean-Baptiste Kempf » 31 Jul 2013 16:32

You're missing the -l option in the Android.mk
Jean-Baptiste Kempf
http://www.jbkempf.com/ - http://www.jbkempf.com/blog/category/Videolan
VLC media player developer, VideoLAN President and Sites administrator
If you want an answer to your question, just be specific and precise. Don't use Private Messages.

gmv
Blank Cone
Blank Cone
Posts: 15
Joined: 18 Feb 2013 18:46

Re: Problems with opencv libraries

Postby gmv » 01 Aug 2013 04:07

Ok, thanks!

But i have got some problems yet.

I've downloaded the code again . Then, i've implemented a .cpp program in the next path: home/virginia/android/vlc/src/input/virtual.cpp

Code: Select all

/* * virtual.cpp */ #include <stdlib.h> #include <jni.h> #include <math.h> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgproc/types_c.h> #include <opencv2/highgui/highgui_c.h> #include <opencv2/photo/photo.hpp> #include <android/log.h> extern "C" { #include "virtual.h" } #define LOG_TAG "VLC - Imagen 3D - JNI" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) using namespace cv; using namespace std; extern "C" int camino(void){... }
This programs calls to the opencv functions.

virtual.h ( home/virginia/android/vlc/src/input/virtual.h)
/*
* virtual.h
*/

Code: Select all

#ifndef __VIRTUAL_H #define __VIRTUAL_H int camino(void); #endif /*__VIRTUAL_H*/
And Android.mk ( home/virginia/android/vlc-android/jni/Android.mk) file:

Code: Select all

include $(CLEAR_VARS) OPENCV_LIB_TYPE:=STATIC OPENCV_INSTALL_MODULES:=on include /home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk include $(OPENCV_MK_PATH) LOCAL_MODULE := virtual LOCAL_SRC_FILES := ../../vlc/src/input/virtual.cpp LOCAL_C_INCLUDES := \ $(ANDROID_NDK)/platforms/android-8/arch-arm/usr/include \ $(ANDROID_NDK)/platforms/android-8/arch-arm/usr/include/android \ /home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/include \ $(VLC_SRC_DIR)/include \ LOCAL_LDLIBS := -L/home/virginia/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/$(ANDROID_ABI) \ -lopencv_highgui -lopencv_imgproc -lopencv_photo -lopencv_core \ $(CPP_STATIC) include $(BUILD_SHARED_LIBRARY) ...
and Application.mk:

Code: Select all

APP_PLATFORM := android-9 APP_ABI := $(ANDROID_ABI) NDK_TOOLCHAIN_VERSION=4.6 APP_STL := gnustl_static APP_MODULES := vlcjni iomx-gingerbread iomx-hc iomx-ics virtual
But the problem is that i need to call to "camino" function from decoder.c (( home/virginia/android/vlc/src/input/decoder.c):

Code: Select all

#include "virtual.h" #ifdef HAVE_CONFIG_H # include "config.h" #endif #include <assert.h> ... static void DecoderPlayVideo( decoder_t *p_dec, picture_t *p_picture, int *pi_played_sum, int *pi_lost_sum ){ ... int res = camino(); msg_Warn( p_dec, "Llamada a virtualJNI devuelve %d", &res ); vout_PutPicture( p_vout, p_picture ); ... } ...
I'm getting the next error:

Code: Select all

SharedLibrary : libvlcjni.so /home/virginia/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(decoder.o): in function DecoderDecodeVideo:../../src/input/decoder.c:1501: error: undefined reference to 'camino' collect2: ld returned 1 exit status make[1]: *** [obj/local/armeabi-v7a/libvlcjni.so] Error 1 make[1]: Leaving directory `/home/virginia/android/vlc-android' make: *** [vlc-android/obj/local/armeabi-v7a/libvlcjni.so] Error 2
Thanks so much!

rakhilkt
New Cone
New Cone
Posts: 5
Joined: 25 Jul 2013 17:09
VLC version: 2.0.1
Operating System: Linux & Windows
Location: Trivandrum, India

Re: Problems with opencv libraries

Postby rakhilkt » 01 Aug 2013 08:05

I don't know much on Android, But is comfortable with OpenCV programming

For compiling a OpenCV program you need to add the following while compiling:
Include the path :
-I/usr/local/include/opencv -I/usr/local/include

Include the shared libraries needed :
/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

Or it is enough that you can just compile it using -->
`pkg-config --libs opencv` and `pkg-config --cflags opencv`
Eg :
g++ opencv_file.cpp `pkg-config --libs opencv` `pkg-config --cflags opencv` -o opencv_executable

If you try 'echo' command along with the above tag in the command line you can see the the above includes and shared libraries.
Thank You

Best Regards
Rakhil KT

gmv
Blank Cone
Blank Cone
Posts: 15
Joined: 18 Feb 2013 18:46

Re: Problems with opencv libraries

Postby gmv » 03 Sep 2013 13:12

Thanks!

I know that the file must be compiled so:
g++ opencv_file.cpp `pkg-config --libs opencv` `pkg-config --cflags opencv` -o opencv_executable

But it is a big project and the compilation of the files isn't written for each file explicitly, one by one.

I have got this in the Android.mk file:

Code: Select all

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OPENCV_LIB_TYPE:=STATIC OPENCV_INSTALL_MODULES:=on include /home/vmg/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk include $(OPENCV_MK_PATH) LOCAL_MODULE := virtual LOCAL_SRC_FILES := ../../vlc/src/input/virtual.cpp LOCAL_C_INCLUDES := \ $(ANDROID_NDK)/platforms/android-8/arch-arm/usr/include \ $(ANDROID_NDK)/platforms/android-8/arch-arm/usr/include/android \ /home/vmg/workspace/OpenCV-2.4.5-android-sdk/sdk/native/jni/include \ $(VLC_SRC_DIR)/include \ LOCAL_LDLIBS := -L/home/vmg/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/$(ANDROID_ABI) \ -L/usr/lib \ -lopencv_highgui -lopencv_imgproc -lopencv_photo -lopencv_core \ $(CPP_STATIC) include $(BUILD_SHARED_LIBRARY)
And in home/vmg/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/armeabi-v7a, there are the next libraries:

Code: Select all

vmg@bakio:~/workspace/OpenCV-2.4.5-android-sdk/sdk/native/libs/armeabi-v7a$ ls libnative_camera_r2.2.0.so libopencv_contrib.a libopencv_ml.a libnative_camera_r2.3.3.so libopencv_core.a libopencv_objdetect.a libnative_camera_r3.0.1.so libopencv_features2d.a libopencv_photo.a libnative_camera_r4.0.0.so libopencv_flann.a libopencv_stitching.a libnative_camera_r4.0.3.so libopencv_highgui.a libopencv_ts.a libnative_camera_r4.1.1.so libopencv_imgproc.a libopencv_video.a libnative_camera_r4.2.0.so libopencv_info.so libopencv_videostab.a libopencv_androidcamera.a libopencv_java.so libopencv_calib3d.a libopencv_legacy.a
I don't know because i get the error:

Code: Select all

/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:294: error: undefined reference to 'cv::Mat::operator _IplImage() const' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:294: error: undefined reference to 'cvGetSize' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:294: error: undefined reference to 'cvCreateImage' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:294: error: undefined reference to 'cvCloneImage' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:294: error: undefined reference to 'cvSmooth' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cvSplit' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cvMerge' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cvInpaint' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cvCvtColor' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cvReleaseImage' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cv::fastFree(void*)' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function camino:../../src/input/virtual.cpp:413: error: undefined reference to 'cv::Mat::deallocate()' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function cv::Mat::~Mat():../../include/opencv2/core/mat.hpp:382: error: undefined reference to 'cv::fastFree(void*)' /home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(virtual.o): in function cv::Mat::~Mat():../../include/opencv2/core/mat.hpp:382: error: undefined reference to 'cv::Mat::deallocate()'
The virtual.cpp file doesn't include JNI code, I don't know if this script must include JNI code to include it in the Android.mk file.


Return to “Development around libVLC”

Who is online

Users browsing this forum: No registered users and 3 guests