caffe源码学习--blob基本用法(基于《21天实战caffe》)

46 篇文章 0 订阅

1、p102页编写blob_demo.cpp后g++编译生成app文件。

在赵老师的书中,很简单就写成功,估计会有人出现一些错误。其实不是路径问题,是格式的问题,嘿嘿!

在你写好Blob模板类。生成可执行程序app的时候就会出现错误! 
CAFFE_ROOT是您之前安转caffe的根目录。 
原先是:

~/caffe$ g++ -o app blob_demo.cpp -I $CAFFE_ROOT/include/ -D CPU_ONLY -I $CAFFE_ROOT/.build_release/src/ -L $CAFFE_ROOT/build/lib/ -lcaffe  
 
 
  • 1
  • 1

改写:

~/caffe$ g++ -o app blob_demo.cpp -I/home/您服务器名字/caffe(博主caffe安装所在路径,与上面CAFFE_ROOT类似)/include/ -D CPU_ONLY -I/home/您服务器名字/caffe/.build_release/src/ -L/home/您服务器名字/CAFFE_ROOT/build/lib/ -lcaffe  
 
 
  • 1
  • 1

改写成这样就好了。

之后,运行改程序的时候,还会有一些错误。 
原先是:

$export LD_LIBRARY_PATH=$CAFFE_ROOT/build/lib/:$LD_LIBRARY_PATH
$./app
Size: (0)
Size: 1 2 3 4 (24)
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

改为:

$export LD_LIBRARY_PATH=/home/您服务器名字/caffe/build/lib/:$LD_LIBRARY_PATH
$./app
Size: (0)
Size: 1 2 3 4 (24)
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
2、以下p103页更改blob_demo.cpp文件

即添加

  1.   Blob<float> a;  
  2.     a.Reshape(1,2,3,4);  
  3.     float *p=a.mutable_cpu_data();  
  4.     float *q=a.mutable_cpu_diff();  
  5.     for(int i=0;i<a.count();i++){  
  6.         p[i]=i;  
  7.     q[i]=a.count()-i-1;  
  8.     }  
  9.     a.Update();  
  10.     for(int u=0;u<a.num();u++){  
  11.         for(int v=0;v<a.channels();v++){  
  12.             for(int w=0;w<a.height();w++){  
  13.                 for(int x=0;x<a.width();x++){  
  14.                     cout<<"a["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"]="  
  15.                         <<a.data_at(u,v,w,x)<<endl;  
  16.                 }  
  17.             }  
  18.         }  
  19.     }  
  20.  retun 0;
  21. }

后利用1中命令编译g++发现以下报错:

1)、/usr/local/lib/libglog.so.0: error adding symbols: DSO missing from command line

问题原因:没有添加正确的glog共享对象库,应该在Miscellaneous->Other Objects中添加/usr/local/lib/libglog.so,同时Libraries(-I)中添加glog。

解决方案:下载并安装glog

           

第一步:

// 查看目录 /usr/lib 或 /usr/local/lib的目录下是否存在libglog.so.0
$ find libglog*
libglog.a
libglog.la
libglog.so
libglog.so.0
libglog.so.0.0.0
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果不存在需要安装,方法如下: 
 Google Logging Library(glog),下载地址:https://code.google.com/p/google-glog/(下载不下来百度搜索glog-0.3.3.找别人分享的),然后解压安装:

$ tar zxvf glog-0.3.3.tar.gz$ cd glog-0.3.3$ ./configure$ make
$ sudo make install
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

如果没有权限就chmod a+x glog-0.3.3 -R , 或者索性 chmod 777 glog-0.3.3 -R(获取权限解锁) , 装完之后,这个文件夹就可以kill了。

注意:安装完之后如果还是报错,要在编译命令g++后面加入-lglog:

g++-o app blob_demo.cpp-lglog

3、如果继续报错

/usr/bin/ld: /tmp/ccaK5QcQ.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
//usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0: error adding symbols: DSO missing from command line

问题原因:未安装bloost库,楼主本来以为自己安装了,结果一搜索才知道是在配置tensorflow时下载的。不能相互通用,因为TensorFlow是内置在框架中的,而caffe是调用ubuntu系统安装的bloost。
解决方案:下载并安装,先下载boost_1_58_0.tar.bz2,具体百度搜索,然后解压
解压命令:tar jxvf boost_1_58_0.tar.bz2
安装命令:
cd boost_1_58_0        #进入boost_1_58_0
# 只安装caffe需要的3个组件,全部安装十分耗时,还可能报错
./bootstrap.sh --with-libraries=system,thread,python 
./b2
sudo ./b2 install
注意:在g++编译语句的后面要加上-lboost_system,再次运行之后发现生成了app文件完美

总结:在安装了glog和boost库之后的完整编译语句为:

$ g++ -o app blob_demo.cpp -lglog -lboost_system -I/home/您服务器名字/caffe/include/ -D CPU_ONLY -I/home/您服务器名字/caffe/.build_release/src/ -L/home/您服务器名字/caffe/build/lib/ -lcaffe

之后就可以继续运行app文件了,
语句:
$exportLD_LIBRARY_PATH=$caffe/build/lib/:$LD_LIBRARY_PATH
$./app
结果:
Size : (0)
Size : 1 2 3 4 (24)
a[0][0][0][0] = 0
a[0][0][0][1] = 1
a[0][0][0][2] = 2
a[0][0][0][3] = 3
a[0][0][1][0] = 4
a[0][0][1][1] = 5
a[0][0][1][2] = 6
a[0][0][1][3] = 7
a[0][0][2][0] = 8
a[0][0][2][1] = 9
a[0][0][2][2] = 10
a[0][0][2][3] = 11
a[0][1][0][0] = 12
a[0][1][0][1] = 13
a[0][1][0][2] = 14
a[0][1][0][3] = 15
a[0][1][1][0] = 16
a[0][1][1][1] = 17
a[0][1][1][2] = 18
a[0][1][1][3] = 19
a[0][1][2][0] = 20
a[0][1][2][1] = 21
a[0][1][2][2] = 22
a[0][1][2][3] = 23
ASUM = 276
SUMSQ = 4324
  
  
  • 1
  • 2
  • 3
  • 4
  • 5


    3、太不幸了,博主之前编译好的app竟然在隔日重新开机后再次运行却再次出现报错,在命令$ ./app之后出现错误:

    ./app: error while loading shared libraries: libcaffe.so.1.0.0-rc5: cannot open shared object file: No such file or directory

    错误原因:无法调用共享库libcaffe.so.1.0.0-rc5,网上搜索,此文件在caffe框架下build/lib路径下,将此文件拷贝复制一份在你的app文件所在目录下,再次运行./app,成功!!!心好累


    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值