gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

iron_guitarist1987
Hello all,

I have a plugin that uses OpenCV and it works perfectly on Kubuntu. Now I am trying to run the code on CentOS but when I run the pipeline, I get:

$ gst-launch videotestsrc ! opencvelement ! ximagesink
WARNING: erroneous pipeline: no element "opencvelement"

When I run ldd in Kubuntu, I get:

        $ ldd .libs/libOPENCVELEMENT.so
        linux-gate.so.1 =>  (0x0060f000)
        libgstbase-0.10.so.0 => /usr/lib/libgstbase-0.10.so.0 (0x00a74000)
        libgstreamer-0.10.so.0 => /usr/lib/libgstreamer-0.10.so.0 (0x00474000)
        libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0x006a2000)
        libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0x00110000)
        libopencv_core.so.2.3 => /usr/local/lib/libopencv_core.so.2.3 (0x00730000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00209000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x002f4000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00acd000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x0031e000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x0033c000)
        libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0x00357000)
        libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 (0x0035d000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00c9c000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00362000)
        libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x0036b000)
        libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0x00370000)
        libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0x00e52000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00377000)
        /lib/ld-linux.so.2 (0x00a10000)

But when I run it on CentOS, I don't see opencv

        $ ldd .libs/libOPENCVELEMENT.so
        linux-vdso.so.1 =>  (0x00007fff7a1fd000)
        libgstvideo-0.10.so.0 => /usr/lib64/libgstvideo-0.10.so.0 (0x00002ba0ac9b7000)
        libgstcontroller-0.10.so.0 => /usr/lib64/libgstcontroller-0.10.so.0 (0x00002ba0acbc4000)
        libgstbase-0.10.so.0 => /usr/lib64/libgstbase-0.10.so.0 (0x00002ba0acdeb000)
        libgstreamer-0.10.so.0 => /usr/lib64/libgstreamer-0.10.so.0 (0x00002ba0ad03c000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00002ba0ad326000)
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00002ba0ad569000)
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00002ba0ad76c000)
        librt.so.1 => /lib64/librt.so.1 (0x00002ba0ad970000)
        libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00002ba0adb7a000)
        libz.so.1 => /lib64/libz.so.1 (0x00002ba0adeb7000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00002ba0ae0cb000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ba0ae3a8000)
        libm.so.6 => /lib64/libm.so.6 (0x00002ba0ae6a8000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ba0ae92b000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ba0aec83000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ba0aee91000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ba0af0ac000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003f6c800000)


Here is my makefile.am, which is the same on both OS


plugin_LTLIBRARIES = libOPENCVELEMENT.la

# Plugin source files:
libOPENCVELEMENT_la_SOURCES = opencv_chain.c opencv_chain.h datasetup.h
libOPENCVELEMENT_la_CFLAGS = \
        $(GST_PLUGINS_BASE_CFLAGS) \
        $(GST_CFLAGS) \
        $(OPENCV_CFLAGS)

libOPENCVELEMENT_la_CXXFLAGS = \
        $(GST_PLUGINS_BASE_CFLAGS) \
        $(GST_CFLAGS) \
        $(OPENCV_CFLAGS)

libOPENCVELEMENT_la_LIBADD = \
        $(GST_PLUGINS_BASE_LIBS) \
        $(GST_LIBS) \
        $(OPENCV_LIBS) \
        -lopencv_core \
        -lopencv_highgui

libOPENCVELEMENT_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libOPENCVELEMENT_la_LIBTOOLFLAGS = --tag=disable-static


Let me know if you need more information. Any help will be appreciated. Thank you.
All your bases are belong to us.
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

Chuck Crisler-2
The obvious question is do you have OpenCV installed on CentOS? It seems not... In fact, I would assume that you would get a link error if you tried building on CentOS. CentOS is a Fedora derivitive. The Red Hat developers don't like software is isn't completely open source. OpenCV is released under the BSD license, so it may not be easily provided to CentOS (via rpm). You may have to download the source and build it yourself. If so, you need to be mindful of glib version compatibility. You might also be able to get it from rpm forge, which you should check first.

On Mon, Jul 30, 2012 at 11:02 AM, iron_guitarist1987 <[hidden email]> wrote:
Hello all,

I have a plugin that uses OpenCV and it works perfectly on Kubuntu. Now I am
trying to run the code on CentOS but when I run the pipeline, I get:

$ gst-launch videotestsrc ! opencvelement ! ximagesink
WARNING: erroneous pipeline: no element "opencvelement"

When I run ldd in Kubuntu, I get:

        $ ldd .libs/libOPENCVELEMENT.so
        linux-gate.so.1 =>  (0x0060f000)
        libgstbase-0.10.so.0 => /usr/lib/libgstbase-0.10.so.0 (0x00a74000)
        libgstreamer-0.10.so.0 => /usr/lib/libgstreamer-0.10.so.0
(0x00474000)
        libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0
(0x006a2000)
        libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0
(0x00110000)
        libopencv_core.so.2.3 => /usr/local/lib/libopencv_core.so.2.3
(0x00730000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6
(0x00209000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x002f4000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00acd000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x0031e000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x0033c000)
        libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0
(0x00357000)
        libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0
(0x0035d000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00c9c000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00362000)
        libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x0036b000)
        libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0x00370000)
        libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0x00e52000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00377000)
        /lib/ld-linux.so.2 (0x00a10000)

But when I run it on CentOS, I don't see opencv

        $ ldd .libs/libOPENCVELEMENT.so
        linux-vdso.so.1 =>  (0x00007fff7a1fd000)
        libgstvideo-0.10.so.0 => /usr/lib64/libgstvideo-0.10.so.0
(0x00002ba0ac9b7000)
        libgstcontroller-0.10.so.0 => /usr/lib64/libgstcontroller-0.10.so.0
(0x00002ba0acbc4000)
        libgstbase-0.10.so.0 => /usr/lib64/libgstbase-0.10.so.0
(0x00002ba0acdeb000)
        libgstreamer-0.10.so.0 => /usr/lib64/libgstreamer-0.10.so.0
(0x00002ba0ad03c000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0
(0x00002ba0ad326000)
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0
(0x00002ba0ad569000)
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0
(0x00002ba0ad76c000)
        librt.so.1 => /lib64/librt.so.1 (0x00002ba0ad970000)
        libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00002ba0adb7a000)
        libz.so.1 => /lib64/libz.so.1 (0x00002ba0adeb7000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00002ba0ae0cb000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ba0ae3a8000)
        libm.so.6 => /lib64/libm.so.6 (0x00002ba0ae6a8000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ba0ae92b000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ba0aec83000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ba0aee91000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ba0af0ac000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003f6c800000)


Here is my makefile.am, which is the same on both OS


plugin_LTLIBRARIES = libOPENCVELEMENT.la

# Plugin source files:
libOPENCVELEMENT_la_SOURCES = opencv_chain.c opencv_chain.h datasetup.h
libOPENCVELEMENT_la_CFLAGS = \
        $(GST_PLUGINS_BASE_CFLAGS) \
        $(GST_CFLAGS) \
        $(OPENCV_CFLAGS)

libOPENCVELEMENT_la_CXXFLAGS = \
        $(GST_PLUGINS_BASE_CFLAGS) \
        $(GST_CFLAGS) \
        $(OPENCV_CFLAGS)

libOPENCVELEMENT_la_LIBADD = \
        $(GST_PLUGINS_BASE_LIBS) \
        $(GST_LIBS) \
        $(OPENCV_LIBS) \
        -lopencv_core \
        -lopencv_highgui

libOPENCVELEMENT_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libOPENCVELEMENT_la_LIBTOOLFLAGS = --tag=disable-static


Let me know if you need more information. Any help will be appreciated.
Thank you.




-----
The greatest trick the devil ever pulled was convincing the World that Java was better than C++.
--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gstreamer-plugin-library-not-linking-against-opencv-shared-object-library-undefined-symbol-on-Kubuntu-tp4655749.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

iron_guitarist1987
I have the latest version of OpenCV installed. 2.4.2
All your bases are belong to us.
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

iron_guitarist1987
When I do a gst-inspect on the .so file I get


$ gst-inspect /usr/lib64/gstreamer-0.10/libopencvtest.so

(gst-inspect-0.10:5378): GStreamer-WARNING **: Failed to load plugin '/usr/lib64/gstreamer-0.10/libopencvtest.so': /usr/lib64/gstreamer-0.10/libopencvtest.so: undefined symbol: _ZN2cv3Mat10deallocateEv
Could not load plugin file: Opening module failed: /usr/lib64/gstreamer-0.10/libopencvtest.so: undefined symbol: _ZN2cv3Mat10deallocateEv
All your bases are belong to us.
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

Chuck Crisler-2
Demangle the undefined symbol and you will know what is missing. That _ZN... is the C++ mangled name of a method. You will then be able to find which library on your system needs to be updated. Just hope it isn't glib...

On Tue, Jul 31, 2012 at 2:09 PM, iron_guitarist1987 <[hidden email]> wrote:
When I do a gst-inspect on the .so file I get


$ gst-inspect /usr/lib64/gstreamer-0.10/libopencvtest.so

(gst-inspect-0.10:5378): GStreamer-WARNING **: Failed to load plugin
'/usr/lib64/gstreamer-0.10/libopencvtest.so':
/usr/lib64/gstreamer-0.10/libopencvtest.so: undefined symbol:
_ZN2cv3Mat10deallocateEv
Could not load plugin file: Opening module failed:
/usr/lib64/gstreamer-0.10/libopencvtest.so: undefined symbol:
_ZN2cv3Mat10deallocateEv




--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gstreamer-plugin-library-not-linking-against-opencv-shared-object-library-undefined-symbol-on-Kubuntu-tp4655749p4655764.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

iron_guitarist1987
$ c++filt -n _ZN2cv3Mat10deallocateEv
cv::Mat::deallocate()

I've tried reinstalling OpenCVin different ways, but I still get the same error. I also installed it in both /usr/lib and /usr/lib64.
All your bases are belong to us.
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

Chuck Crisler-2
Try posting the message on their forum, because it looks like a problem with their library.

On Tue, Jul 31, 2012 at 3:22 PM, iron_guitarist1987 <[hidden email]> wrote:
$ c++filt -n _ZN2cv3Mat10deallocateEv
cv::Mat::deallocate()

I've tried reinstalling OpenCVin different ways, but I still get the same
error. I also installed it in both /usr/lib and /usr/lib64.



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gstreamer-plugin-library-not-linking-against-opencv-shared-object-library-undefined-symbol-on-Kubuntu-tp4655749p4655766.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

Chuck Crisler-2
Just another thought. The gstreamer ffmpeg plug-in has support for opencv. There could be something there that is causing your problem.

On Tue, Jul 31, 2012 at 3:26 PM, Chuck Crisler <[hidden email]> wrote:
Try posting the message on their forum, because it looks like a problem with their library.


On Tue, Jul 31, 2012 at 3:22 PM, iron_guitarist1987 <[hidden email]> wrote:
$ c++filt -n _ZN2cv3Mat10deallocateEv
cv::Mat::deallocate()

I've tried reinstalling OpenCVin different ways, but I still get the same
error. I also installed it in both /usr/lib and /usr/lib64.



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gstreamer-plugin-library-not-linking-against-opencv-shared-object-library-undefined-symbol-on-Kubuntu-tp4655749p4655766.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer plugin library not linking against opencv shared object library - “undefined symbol” on Kubuntu

iron_guitarist1987
I was able to solve this by going to /usr/lib64/pkgconfig and modified opencv.pc to explicitly have all libraries. I also had to move the plugins from /usr/lib/gstreamer-0.10 to /usr/lib64/gstreamer-0.10
All your bases are belong to us.