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

来源:互联网 发布:mac os beta版 编辑:程序博客网 时间:2024/06/15 22:13

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