caffe_.mexa64: undefined symbol:protobuf8internal10WireFormat 分析思路与解决方案
2017-05-04 15:52
1081 查看
安装 MatCaffe 的时候,报错:caffe_.mexa64: undefined symbol:protobuf8internal10WireFormat
分析思路: 错误信息包含两个关键信息:1. undefined symbol 2. protobuf 和 WireFormat
(1)undefined symbol : 这个错误的原因在于,有对应函数的“声明”,但是没有找到函数的“实现”。换句话说,MakeFile包含了该函数的头文件,却不包含对应的library。
(2)protobuf 和 WireFormat: 看到这个,我猜想 wireFormat 是 protobuf 中的某个函数的名称,经过查找,还真是,所以我确定这个问题的原因就是:找不到正确的 protobuf 库
具体来说,我在 Makefile.config 中,令 USE_PKG_CONFIG := 1,让 pkg_config 帮助我寻找 protobuf 库的路径,结果,这家伙只能告诉编译器 Include 目录,没什么卵用,所以我自己在 Makefile 中添加 protobuf 库路径:
# to enable protobuf
LIBRARY_DIRS += /usr/lib/x86_64-linux-gnu
接下来,重新编译一次:
make clean
make all
make matcaffe
成功,但是在 Matlab 中输入 caffe.set_mode_cpu(),仍然报错。
于是,在 Matlab 中输入命令:(列出 caffe_.mexa64 所有依赖的库文件 )
!ldd /home/Caffe-FaceAlignment/matlab/+caffe/private/caffe_.mexa64
关键的信息出现了:
libprotobuf.so.8 => /home/Programs/matlab_2016b/bin/glnxa64/libprotobuf.so.8 (0x00007f1787ddb000)
查看glnxa64/libprotobuf.so.8,发现它是一个软链接,指向 /matlab_2016b/bin/glnxa64/libprotobuf.so.8.0.0
也许就是这个库有问题,所以我让它重新指向系统中的 protobuf 库(/usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0)
再次编译,问题完美解决。
分析思路: 错误信息包含两个关键信息:1. undefined symbol 2. protobuf 和 WireFormat
(1)undefined symbol : 这个错误的原因在于,有对应函数的“声明”,但是没有找到函数的“实现”。换句话说,MakeFile包含了该函数的头文件,却不包含对应的library。
(2)protobuf 和 WireFormat: 看到这个,我猜想 wireFormat 是 protobuf 中的某个函数的名称,经过查找,还真是,所以我确定这个问题的原因就是:找不到正确的 protobuf 库
具体来说,我在 Makefile.config 中,令 USE_PKG_CONFIG := 1,让 pkg_config 帮助我寻找 protobuf 库的路径,结果,这家伙只能告诉编译器 Include 目录,没什么卵用,所以我自己在 Makefile 中添加 protobuf 库路径:
# to enable protobuf
LIBRARY_DIRS += /usr/lib/x86_64-linux-gnu
接下来,重新编译一次:
make clean
make all
make matcaffe
成功,但是在 Matlab 中输入 caffe.set_mode_cpu(),仍然报错。
于是,在 Matlab 中输入命令:(列出 caffe_.mexa64 所有依赖的库文件 )
!ldd /home/Caffe-FaceAlignment/matlab/+caffe/private/caffe_.mexa64
关键的信息出现了:
libprotobuf.so.8 => /home/Programs/matlab_2016b/bin/glnxa64/libprotobuf.so.8 (0x00007f1787ddb000)
查看glnxa64/libprotobuf.so.8,发现它是一个软链接,指向 /matlab_2016b/bin/glnxa64/libprotobuf.so.8.0.0
也许就是这个库有问题,所以我让它重新指向系统中的 protobuf 库(/usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0)
再次编译,问题完美解决。
相关文章推荐
- caffe:cannot import name symbol_database/ protobuf problem in caffe
- ubuntu16.04下编译caffe出现.build_release/lib/libcaffe.so: undefined reference to google ::protobuf...的问题
- skyeye启动显示ImportError:ctypes.so: undefined symbol: PyFloat_Type解决方案
- Qt源码编译完成后,执行中出现undefined symbol: _ZN16QCoreApplicationC1ERiPPci错误解决方案
- undefined reference to symbol xxxxx和undefined symbol:xxxx错误的原因分析以及解决方法
- Ubuntu14.04LTS下应用Caffe训练Cifar10错误案例分析与解决方案1
- caffe支持pycaffe的安装:ImportError: No module named google.protobuf.internal
- src/lxml/etree.so: undefined symbol: xmlSchematronSetValidStructuredErrors 解决方案
- Caffe代码导读(1):Protobuf例子
- caffe中protobuf问题
- Protobuf简单使用及其抓包分析
- Google的Protobuf协议分析
- protobuf 源代码分析 (1)准备工作
- Caffe代码导读(1):Protobuf例子
- vs2013编译protobuf(Goole Protocol Buffers)源码错误解决方案
- caffe protobuf介绍
- protobuf中的Base 128 Varints类型分析
- 关于google的protobuf在vs的release版下编译出错的解决方案
- Protobuf简单使用及其抓包分析
- 关于ImportError: xxxx.so: undefined symbol: PyFPE_jbuf的解决方案