2010-07-29 2 views
1

Я пытаюсь использовать видео-библиотеку под названием VideoIO с MATLAB для проекта машинного обучения. Когда я пытаюсь вызвать библиотеку в MATLAB, я получаю сообщение об ошибке, что он не может найти libavutil.so.50, одну из библиотек ffmpeg, от которых зависит VideoIO. Я проверил несколько разных вещей, но не могу найти ничего, что выглядит неправильно, кроме того, что он не запускается. Может ли кто-нибудь предложить что-нибудь еще, чтобы проверить, чтобы помочь мне отлаживать?Как диагностировать, почему файл .so не загружается при выполнении .mex-файла в MATLAB?

Здесь ошибка:

error while loading shared libraries: libavutil.so.50: cannot open shared object file: No such file or directory 
??? Error using ==> videoReader_ffmpegPopen2 EOF found while trying to read the communication tag. 
The server process probably died. 
String so far: "" Function: int VideoIO::readMessageHeader(FILE*) 
File : pipecomm.h Line : 306 
Error in ==> videoReader.videoReader at 152 vr.handle = feval(vr.plugin, 'open',vr.handle, ... 

Пытаясь выяснить, что пошло не так, я нашел место, где vr выделяется:

vr = struct('plugin',pvtVideoIO_mexName(mfilename, plugin), ... 'handle',int32(-1)); 

я распечатал mfilename, а затем побежал ldd на файл, он указывает на:

$ ldd videoReader_ffmpegPopen2Server 
linux-vdso.so.1 => (0x00007fff41dff000) 
libavutil.so.50 => /u/goodfeli/ffmpeg/libavutil/libavutil.so.50 (0x00007fd5f2895000) 
libavdevice.so.52 => /u/goodfeli/ffmpeg/libavdevice/libavdevice.so.52 (0x00007fd5f268c000) 
libavformat.so.52 => /u/goodfeli/ffmpeg/libavformat/libavformat.so.52 (0x00007fd5f23bf000) 
libavcodec.so.52 => /u/goodfeli/ffmpeg/libavcodec/libavcodec.so.52 (0x00007fd5f1792000) 
libavfilter.so.1 => /u/goodfeli/ffmpeg/libavfilter/libavfilter.so.1 (0x00007fd5f1584000) 
libswscale.so.0 => /u/goodfeli/ffmpeg/libswscale/libswscale.so.0 (0x00007fd5f1351000) 
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000378ea00000) 
libm.so.6 => /lib64/libm.so.6 (0x0000003788a00000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000378c600000) 
libc.so.6 => /lib64/libc.so.6 (0x0000003788600000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003789200000) 
libasound.so.2 => /lib64/libasound.so.2 (0x000000379a200000) 
libbz2.so.1 => /lib64/libbz2.so.1 (0x0000003b0b400000) 
libz.so.1 => /lib64/libz.so.1 (0x0000003789600000) 
/lib64/ld-linux-x86-64.so.2 (0x0000003787400000) 
libdl.so.2 => /lib64/libdl.so.2 (0x0000003788e00000) 
librt.so.1 => /lib64/librt.so.1 (0x000000378b200000) 

Теперь, копируют и вставляют путь для libavutil, я подтверждаю, что это правильно:

$ ls /u/goodfeli/ffmpeg/libavutil/libavutil.so.50 
/u/goodfeli/ffmpeg/libavutil/libavutil.so.50 

Так что файл существует. Теперь в MATLAB проверить переменную LD_LIBRARY_PATH MATLAB в:

>> getenv('LD_LIBRARY_PATH') 
ans = /soft/diro/share/matlabr2009b/sys/os/glnxa64:/soft/diro/share/matlabr2009b/bin/glnxa64:/soft/diro/share/matlabr2009b/extern/lib/glnxa64:/soft/diro/share/matlabr2009b/runtime/glnxa64:/soft/diro/share/matlabr2009b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/soft/diro/share/matlabr2009b/sys/java/jre/glnxa64/jre/lib/amd64/server:/soft/diro/share/matlabr2009b/sys/java/jre/glnxa64/jre/lib/amd64:/u/goodfeli/ffmpeg/libavfilter:/u/goodfeli/ffmpeg/libswscale:/u/goodfeli/ffmpeg/libavdevice:/u/goodfeli/ffmpeg/libavformat:/u/goodfeli/ffmpeg/libavcodec:/u/goodfeli/ffmpeg/libavutil:/opt/lisa/os/cuda/lib64:/opt/lisa/os/cuda/lib:/opt/lisa/byhost/lib:/opt/lisa/os/lib/vtk:/opt/lisa/os/lib/intelmkl/lib/32:/opt/lisa/os/lib:/opt/lisa/os/lib64:/usr/local/lib:/usr/lib64/atlas/::/opt/lisa/os/panda/lib:/opt/lisa/os/lib32:/opt/lisa/byhost/lib32 

Это кажется правильными, оно включает в себя /u/goodfeli/ffmpeg/libavutil/ и пути копирования вставки его можно проверить, нет никакой опечатки:

$ ls /u/goodfeli/ffmpeg/libavutil/ | grep "\.so" 

Любых предложений по какому проверить далее? Заранее спасибо.

ответ

4

Установка export LD_DEBUG=libs перед вызовом Matlab может предоставить ключи.

+0

Спасибо, оказалось, что в make-файле возникла проблема, когда он помещал полный путь к файлу, а не подкаталог, в качестве аргумента для rpath. Я бы поддержал вас, но мне нужна репутация 15, прежде чем мне разрешат выступить. –

 Смежные вопросы

  • Нет связанных вопросов^_^