今天編譯caffe-ssd遇到編譯錯誤:
1 Line 9690: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(141): error C2061: syntax error: identifier 'SliceLayer' 2 Line 9690: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(141): error C2061: syntax error: identifier 'SliceLayer' 3 Line 9696: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(262): error C2061: syntax error: identifier 'NormalizeLayer' 4 Line 9696: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(262): error C2061: syntax error: identifier 'NormalizeLayer' 5 Line 9702: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(272): error C2061: syntax error: identifier 'InnerProductLayer' 6 Line 9702: 3>E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(272): error C2061: syntax error: identifier 'InnerProductLayer' 7 Line 10141: 4>LINK : fatal error LNK1104: cannot open file '..\lib\Debug\caffe-d.lib'
經查,是下面文件里沒有添加上面對應的三個頭文件。
添加下面三行到layer_factory.cpp:
#include "caffe/layers/slice_layer.hpp" #include "caffe/layers/normalize_layer.hpp" #include "caffe/layers/inner_product_layer.hpp"
再次編譯,報錯:
E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(265): error C2955: 'caffe::NormalizeLayer': use of class template requires template argument list
E:\GitHub\caffe-ssd-windows\include\caffe/layers/normalize_layer.hpp(18): note: see declaration of 'caffe::NormalizeLayer'
E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(267): note: see reference to function template instantiation 'boost::shared_ptr<caffe::Layer<Dtype>> caffe::GetNormalizeLayer<float>(const caffe::LayerParameter &)' being compiled
with
[
Dtype=float
]
E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(265): error C2514: 'caffe::NormalizeLayer': class has no constructors
E:\GitHub\caffe-ssd-windows\include\caffe/layers/normalize_layer.hpp(18): note: see declaration of 'caffe::NormalizeLayer'
E:\GitHub\caffe-ssd-windows\src\caffe\layer_factory.cpp(275): error C2514: 'caffe::InnerProductLayer': class has no constructors
查找原因:
將
return shared_ptr<Layer<Dtype> >(new NormalizeLayer(param));
改為(添加了<Dtype>):
return shared_ptr<Layer<Dtype> >(new NormalizeLayer<Dtype>(param));
將:
return shared_ptr<Layer<Dtype> >(new InnerProductLayer(param));
改為(添加了<Dtype>):
return shared_ptr<Layer<Dtype> >(new InnerProductLayer<Dtype>(param));
然后就編譯通過了。