0

OpenCV を使用するプラグインがあり、Kubuntu で完全に動作します。今、CentOS でコードを実行しようとしていますが、パイプラインを実行すると、次のようになります。

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

Kubuntu で ldd を実行すると、次のようになります。

    $ 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) 

しかし、CentOS で実行すると、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) 

これが私のmakefile.amです。これは両方の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 

さらに情報が必要な場合はお知らせください。どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

0

/usr/lib64/pkgconfig に移動し、opencv.pc を変更してすべてのライブラリを明示的に指定することで、これを解決できました。また、プラグインを /usr/lib/gstreamer-0.10 から /usr/lib64/gstreamer-0.10 に移動する必要がありました

于 2012-08-01T18:38:45.557 に答える
0

centosにもすべてのopencv開発ファイルがインストールされていますか。次を実行します。

grep  "OPENVC_" Makefile

Make 変数の内容を確認します。また、リンカ (未定義シンボル) の出力を c++filt にパイプして、マングルされた名前の代わりに実際の関数名を表示することもできます。

于 2012-07-31T18:37:15.137 に答える