使用Caffe运行简单的c++程序



我想用caffe运行我的简单程序,我得到了一个错误

#include <iostream>
#include <caffe/caffe.hpp>
#include <memory>
using namespace std;
using namespace caffe;
int main(int argc, char** argv) {
    shared_ptr<Net<float> > net_;
    string file_name="it doesn't matter ";
    net_.reset(new Net<float>(file_name, TEST));
// or just: Net<float>     caffe_test_net(file_name, TEST);
}

它的构建没有问题,但当我运行程序错误:符号查找错误:/home/parrot/eclipse/workspace/test_caffe/debug/test_caffe:未定义符号:_ZN5caffe3NetIfEC1ERKSsNS_5PhaseEPKS1_

我注意到,当我在代码中使用caffe::TEST或caffe::TRAIN时,会出现:问题。我认为有一些问题与:caffe::Phase有关。所以我不能创建caffe::Net,因为我不能使用caffe::TEST。当我使用其他类函数…

我使用IDE: Eclipse构建项目。控制台的一些报告:

让所有
构建文件:../src/Test_Caffe.cpp调用:跨c++编译器
g++ -I"/home/smilart/0_Intall/1 caffe-rc3/include/" -I/usr/local/cuda-7.5/include/- 0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Test_Caffe。d src/Test_Caffe"太"。"- 0"src/Test_Caffe。o". ./src/Test_Caffe.cpp"构建完成:../src/Test_Caffe.cpp

构建目标:Test_Caffe调用:交叉g++链接器
-L"/home/smilart/0_Intall/1 caffe-rc3/build/lib/" -o "Test_Caffe" ./src/Test_Caffe。0 -lboostrongystem -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lcudart -lcublas -lcurand -lboost_filesystem -lglog -lprotobuf -lcaffe完成构建目标:Test_Caffe

目录/home/smilart/0_Intall/1 caffe-rc3/build/lib不在动态加载器(加载动态库)查找的标准库搜索路径中。

这个问题基本上有四种解决方案:

  1. 将库(和头文件)安装到系统目录中,系统加载程序在其中查找库。然后重建。

  2. 将目录/home/smilart/0_Intall/1 caffe-rc3/build/lib添加到加载器查找路径中,编辑/etc/ld.so.conf,运行ldconfig程序

  3. 修改环境变量LD_LIBRARY_PATH以包含/home/smilart/0_Intall/1 caffe-rc3/build/lib。但是很少有人推荐这个解决方案。

  4. 修改build命令,以便链接器在可执行文件中嵌入到库的正确路径。这必须通过将-Wl,-rpath,/home/smilart/0_Intall/1 caffe-rc3/build/lib添加到链接器命令行来完成。这是在链接器的Eclipse项目设置中完成的。

我推荐最后一个解决方案。

作为另一种选择,您可以使用insight -一个nvidia公司的eclipse版本。以下是来自caffe官方github的一些说明:https://github.com/BVLC/caffe/wiki/IDE---Nvidia%E2%80%99s-Eclipse-Nsight

最新更新