Ubuntu-Caffe安装:在layer_factory.cpp中捕获多态类型

问题描述 投票:0回答:1

我正在尝试在虚拟Ubuntu计算机上安装Caffe(仅CPU版本),并且遇到了Python层(layer_factory.cpp文件)的问题。我有以下系统信息:

  • Ubuntu 20.04 LTS(64位)
  • Python 3.8.2
  • OpenCV 4.3.0

我严格按照此处的说明进行操作https://qengineering.eu/install-caffe-on-ubuntu-18.04-with-opencv-4.1.html(没有CUDA或CUDNN)。当我尝试在caffe-master目录中执行“全部制作”命令时,出现以下错误:

nina@nina-VirtualBox:~/caffe-master$ make all
PROTOC src/caffe/proto/caffe.proto
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/data_transformer.cpp
...
CXX src/caffe/syncedmem.cpp
CXX src/caffe/layer_factory.cpp
src/caffe/layer_factory.cpp: In instantiation of ‘boost::shared_ptr<caffe::Layer<Dtype> > caffe::GetPythonLayer(const caffe::LayerParameter&) [with Dtype = float]’:
src/caffe/layer_factory.cpp:304:1:   required from here
src/caffe/layer_factory.cpp:298:5: warning: catching polymorphic type ‘struct boost::python::error_already_set’ by value [-Wcatch-value=]
  298 |   } catch (bp::error_already_set) {
      |     ^~~~~
src/caffe/layer_factory.cpp: In instantiation of ‘boost::shared_ptr<caffe::Layer<Dtype> > caffe::GetPythonLayer(const caffe::LayerParameter&) [with Dtype = double]’:
src/caffe/layer_factory.cpp:304:1:   required from here
src/caffe/layer_factory.cpp:298:5: warning: catching polymorphic type ‘struct boost::python::error_already_set’ by value [-Wcatch-value=]
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld: cannot find -lboost_python3
/usr/bin/ld: cannot find -lpython3.8m
collect2: error: ld returned 1 exit status
make: *** [Makefile:596: .build_release/lib/libcaffe.so.1.0.0] Error 1

在layer_factory.cpp文件的以下部分中引发了错误:

#ifdef WITH_PYTHON_LAYER
template <typename Dtype>
shared_ptr<Layer<Dtype> > GetPythonLayer(const LayerParameter& param) {
  Py_Initialize();
  try {
    bp::object module = bp::import(param.python_param().module().c_str());
    bp::object layer = module.attr(param.python_param().layer().c_str())(param);
    return bp::extract<shared_ptr<PythonLayer<Dtype> > >(layer)();
  } catch (bp::error_already_set) {
    PyErr_Print();
    throw;
  }
}

有人可以帮我吗? :-)

ubuntu installation caffe
1个回答
0
投票

通过更改解决

catch (bp::error_already_set)

to

catch (bp::error_already_set&)

似乎是一个通用解决方案->而是通过引用而不是按值捕获异常。

© www.soinside.com 2019 - 2024. All rights reserved.