caffe_.mexa64: undefined symbol:protobuf8internal10WireFormat 分析思路与解决方案

    安装 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)

    

    再次编译,问题完美解决。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值