libopencv_superres.so.2.4: undefined symbol: _ZTIN2cv16ParallelLoopBodyE

参考:http://kyamagu.github.io/mexopencv/#linux


 在Linux下跑caffe的matlab接口时出现 libopencv_superres.so.2.4: undefined symbol: _ZTIN2cv16ParallelLoopBodyE  的错误。

开始以为是没编译好,于是重新编译了下 make mat,再次打开matlab 在 调用 caffe('is_initialized') 时还是出现同样错误,Google之,原来是因为库冲突了,在matlab中使用opencv时matlab会载入它自己的 opencv 版本的库。可以使用 LD_PRELOAD  强制定位到自己安装的opencv  。

首先可以查看是那些库冲突了:

1.在终端中 $ ldd /path/to/mexopencv/+cv/private/imread.mexa64

2.在matlab的命令窗口  >> !ldd /path/to/mexopencv/+cv/private/imread.mexa64

3.可以从两者输出的结果中看到其定位的不同。


然后, 在打开matlab之前使用 LD_PRELOAD 就可以了,如

LD_PRELOAD=/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_superres.so.2.4:/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_video.so.2.4 matlab


或者可以使用Linux的 alias别名技术,在 .bashrc  或者 .bash_profile 之类的文件中加入

alias matlab='LD_PRELOAD=/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_superres.so.2.4:/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_video.so.2.4 matlab'

别忘了 source .bash_profile


由于我是远程登录的学校的集群,只有普通权限,貌似在.bash_profile中添加不起作用,所以是在matlab的bin文件夹下 敲的

LD_PRELOAD=/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_superres.so.2.4:/home/zhmxu/software/opencv-2.4.8/build/lib/libopencv_video.so.2.4 matlab


再次运行matlab,一切正常。

你可能感兴趣的:(记录)