2016-11-02 27 views
1

最近、OSをUbuntu Precise Saucy(13.10)からTrusty(14.04)にアップグレードしました。このアップグレードの後、cv :: VideoCaptureが正常に動作しなくなりました。ビデオファイルを読むとき、プログラムは中断します。例えば、OpenCV-C++ VideoCaptureでビデオファイルを開くことができません

int main(int argc, char**argv) 
{ 
    cv::VideoCapture vin("sample/vout2l.avi"); 
... 

このプログラムを実行すると、それはメッセージを中止します:

*** Error in `./cv2-videoread.out': malloc(): memory corruption: 0x0000000000e3eff0 *** 
Abort (core dumped) 

バックトレースは、次のようになります。

[New LWP 15586] 
[New LWP 15587] 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 
Core was generated by `./cv2-videoread.out'. 
Program terminated with signal SIGABRT, Aborted. 
#0 0x00007ff953e61c37 in raise() from /lib/x86_64-linux-gnu/libc.so.6 
(gdb) bt 
#0 0x00007ff953e61c37 in raise() from /lib/x86_64-linux-gnu/libc.so.6 
#1 0x00007ff953e65028 in abort() from /lib/x86_64-linux-gnu/libc.so.6 
#2 0x00007ff953e9e2a4 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#3 0x00007ff953eabe26 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#4 0x00007ff953eac1ab in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#5 0x00007ff953eadba4 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#6 0x00007ff953eaf7d2 in posix_memalign() from /lib/x86_64-linux-gnu/libc.so.6 
#7 0x00007ff94fa640fe in av_malloc() from /usr/lib/x86_64-linux-gnu/libavutil.so.52 
#8 0x00007ff94fa641b1 in av_strdup() from /usr/lib/x86_64-linux-gnu/libavutil.so.52 
#9 0x00007ff94fa5e5db in av_dict_set() 
    from /usr/lib/x86_64-linux-gnu/libavutil.so.52 
#10 0x00007ff954738574 in CvCapture_FFMPEG::open(char const*)() 
    from /usr/lib/libopencv_highgui.so.2.4 
#11 0x00007ff954738719 in cvCreateFileCapture_FFMPEG() 
    from /usr/lib/libopencv_highgui.so.2.4 
#12 0x00007ff95473aac9 in cvCreateFileCapture_FFMPEG_proxy(char const*)() 
    from /usr/lib/libopencv_highgui.so.2.4 
---Type <return> to continue, or q <return> to quit--- 
#13 0x00007ff954722d89 in cvCreateFileCapture() 
    from /usr/lib/libopencv_highgui.so.2.4 
#14 0x00007ff954723045 in cv::VideoCapture::open(std::string const&)() 
    from /usr/lib/libopencv_highgui.so.2.4 
#15 0x00007ff95472315c in cv::VideoCapture::VideoCapture(std::string const&)() 
    from /usr/lib/libopencv_highgui.so.2.4 
#16 0x0000000000401281 in main (argc=1, argv=0x7fff1f938388) at cv2-videoread.cpp:30 
(gdb) 

注:cv::VideoCapture vin(...は30行です。

OSをアップグレードする前に、このコードは同じ入力ファイルで動作していました。

バックトレースからは、CvCapture_FFMPEGlibavutilに問題が発生しているようです。私はパッケージffmpeg libavutil-dev libavutil51 libavutil52をアップグレードしましたが、すでに最新の状態でした。 また、OpenCVパッケージは最新のものです(libopencv-core-dev libopencv-core2.4 libopencv-dev libopencv-highgui-dev libopencv-highgui2.4をチェックしました)。

また、ソースからビルドされたOpenCVもテストしましたが、同じ結果が得られました。

これを理解するアイデアはありますか?

答えて

0

私はこの問題を解決しました。

lddでプログラムを解析すると、たとえば、/usr/lib/libopencv_highgui.soにリンクされていました。ただし、x86_64システムでは、/usr/lib/x86_64-linux-gnu/libopencv_highgui.soである必要があります。私のシステムでは、両方のファイルがインストールされていました。

この問題は、/usr/lib/libopencv_*.soによって引き起こされました(私はそれらをどのようにインストールしたかわかりません。私はこれらのファイルを削除し、上記のプログラムを再度コンパイルしました。その後、エラーなしで動作しました。

関連する問題