[caffe问题记录]undefined symbol: _ZN5caffe3NetIfEC1ERKSsNS_5PhaseEPKS1_

caffe问题记录

一段时间没用caffe跑模型, 训练的时候报错.

Error:…/caffe/python/caffe/_caffe.so:undefined symbol: ZN5caffe3NetIfEC1ERKSsNS_5PhaseEPKS1

查了查遇到同样问题的人也比较少, 找到stack的这个链接比较有用:Link

解决方法翻译过来就是:

目录caffe-rc3/build/lib不在查找动态加载器(加载动态库)的标准库搜索路径中.

这个问题基本上有四种解决方案:
1.将库(和头文件)安装到系统目录中, 系统加载程序查找库,然后重新编译.

2.编辑/etc/ld.so.conf , 将目录caffe-rc3/build/lib加到程序查找的路径中, 然后执
行ldconfig.

3.修改环境变量LD_LIBRARY_PATH, 使包含caffe-rc3/build/lib , 很少有人推荐这个解决方案.

4.修改构建命令, 以便链接器将正确的路径嵌入到可执行文件中的库中. 这必须通过在链接器命令行中添加-Wl,-rpath,caffe-rc3/build/lib来完成, 在IDE-Eclipse项目设置中设置.

1,4两条适用于IDE, 所以尝试了2,3方法, 并没有解决问题.

无果后决定重编译caffe(…hhhh)

make all 和make test没问题, 结果make runtest时又报了这个问题:

.build_release/tools/caffe:undefined symbol:
ZN5caffe3NetIfEC1ERKSsNS_5PhaseEPKS1

这是在生成caffe的可执行bin文件时出错, 于是在此目录下查看了caffe内调用的动态链接, 结果类似如下:

~/caffe/.build_release/tools$ ldd -r caffe
linux-vdso.so.1 (0x00007ffff7752000)
libcaffe.so.1.0.0 => …/caffe/.build_release/tools/./…/lib/libcaffe.so.1.0.0 (0x00007f67c657c000)
libcudart.so.10.0 => /usr/local/cuda/lib64/libcudart.so.10.0 (0x00007f67c6302000)
libglog.so.0 => /usr/lib/x86_64-linux-gnu/libglog.so.0 (0x00007f67c60d1000)
libgflags.so.2.2 => /usr/lib/x86_64-linux-gnu/libgflags.so.2.2 (0x00007f67c5eac000)
libprotobuf.so.10 => /usr/lib/x86_64-linux-gnu/libprotobuf.so.10 (0x00007f67c5a53000)

没有截图记录, 当时第二行的信息是

libcaffe.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcaffe.so.1.0.0

???caffe从全局的lib库里调用了libcaffe.so.1.0.0, 查看了/usr/lib/x86_64-linux-gnu/下果然有一个libcaffe.so.1.0.0, 把它用权限删除,再次make runtest, 成功.

侧面验证了上面的stack回答里的原因总结:目录caffe-rc3/build/lib不在查找动态加载器(加载动态库)的标准库搜索路径中.
由于全局库中不知道哪里来的一个libcaffe, 调用caffe时没找到caffe/build/lib的正确路径下, 而是优先找到了全局库/usr/lib/x86_64-linux-gnu/, 并且没有权限调用, 因此报错undefined symbol.

你可能感兴趣的:(caffe,caffe)