问题描述
在本人尝试用pycaffe运行一个程序(snntoolbox)时,出现了
Boost.Python.ArgumentError: Python argument types in Net.__init__(Net, unicode, int) did not match C++ signature:
的报错,在翻过各大论坛的相关回答和官方网站的教程之后,主要意见有:1.传递参数类型与函数声明中不一致;2.Boost不应该由sudo apt install
安装,而应该直接由源码根据自身的python进行编译(build against python version)。
根据本人的情况分析(pycaffe+snntoolbox运行),更有可能是由于第二个原因引起,因此尝试解决这个问题的话,自然要学习如何通过源码编译安装。(结果学会了从源码安装boost,但是没能够解决报错,猜想可能是因为:a.卸载不干净,b.caffe的Makefile里面的设置问题)
本人对于boost是个门外汉,文章应该有蛮多纰漏的,欢迎指正。
boost简要介绍
- boost: Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。
- boost.python:它是boost库的一部分,随boost一起安装,用来实现C++和Python代码的交互。
libboost-dev的卸载
如果你之前已经用sudo apt install libboost-dev libboost-all-dev
的方式安装了boost(比如你在Ubuntu16.04下按照CUDA官网推荐方式安装了caffe的话),建议先卸载。
卸载方式如下:
sudo apt remove libboost-dev libboost-all-dev
Boost.python的编译安装
- 说明:因为caffe需要boost的支持,在卸载以后所有boost文件都需要通过安装(对于非boost.python来说,安装就是将头文件拷贝到PREFIX路径[默认为/usr/local]),不只boost.python(boost.python不是headers-only文件,需要单独build)