按照网上的教程配置好caffe的环境后
make all -j8
最后出现
non-virtual thunk to caffe::BasePrefetchingDataLayer< float > InternalThreadEntry ()
最后各种查找,google,竟然在http://discuss.cocos2d-x.org/t/error-non-virtual-thunk-to-cocos2d-cclayer-cctouchbegan/9061中一个
回答中找到了一个回答,是由于多类继承中导致了时间上的问题
一想,应该是开始用多线程编译的时候出现的,也比较奇怪,在ubuntu14.04 TLS就没有这个问题
最后将原来编译的全部clean掉,之前有试过用单线程编译,但是忘记了clean,最后导致问题
make clean
make all
就行了
补充。之前在编译到33%时遇到一个奇葩的问题,\caffe-master\src\caffe\layers\base_conv_layer.cpp中出现一个类ConvolutionParameter 识别不了
namespace caffe {
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top) {
CHECK_EQ(4, bottom[0]->num_axes()) << "Input must have 4 axes, "
<< "corresponding to (num, channels, height, width)";
// Configure the kernel size, padding, stride, and inputs.
ConvolutionParameter conv_param = this->layer_param_.convolution_param();
CHECK(!conv_param.has_kernel_size() !=
!(conv_param.has_kernel_h() && conv_param.has_kernel_w()))
<< "Filter size is kernel_size OR kernel_h and kernel_w; not both";
CHECK(conv_param.has_kernel_size() ||
(conv_param.has_kernel_h() && conv_param.has_kernel_w()))
<< "For non-square filters both kernel_h and kernel_w are required.";
CHECK((!conv_param.has_pad() && conv_param.has_pad_h()
&& conv_param.has_pad_w())
|| (!conv_param.has_pad_h() && !conv_param.has_pad_w()))
<< "pad is pad OR pad_h and pad_w are required.";
CHECK((!conv_param.has_stride() && conv_param.has_stride_h()
&& conv_param.has_stride_w())
|| (!conv_param.has_stride_h() && !conv_param.has_stride_w()))
<< "Stride is stride OR stride_h and stride_w are required.";
if (conv_param.has_kernel_size()) {
kernel_h_ = kernel_w_ = conv_param.kernel_size();
} else {
kernel_h_ = conv_param.kernel_h();
kernel_w_ = conv_param.kernel_w();
}
CHECK_GT(kernel_h_, 0) << "Filter dimensions cannot be zero.";
CHECK_GT(kernel_w_, 0) << "Filter dimensions cannot be zero.";
if (!conv_param.has_pad_h()) {
pad_h_ = pad_w_ = conv_param.pad();
} else {
pad_h_ = conv_param.pad_h();
pad_w_ = conv_param.pad_w();
}