运行 使用 Caffe 的简单 C++ 程序
Running simple C++ programm using Caffe
我正在尝试 运行 我使用 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。
当我使用来自 caffe 库的其他 class\function... 等时,不会产生此错误。
我使用 IDE: Eclipse 来构建项目。来自控制台的一些报告:
全部
构建文件:../src/Test_Caffe.cpp
调用:交叉 G++ 编译器
g++ -I"/home/smilart/0_Intall/1 caffe-rc3/include/" -I/usr/local/cuda-7.5/include/ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Test_Caffe.d" -MT"src/Test_Caffe.o" -o "src/Test_Caffe.o" "../src/Test_Caffe.cpp"
完成建筑:../src/Test_Caffe.cpp
建设目标:Test_Caffe
调用:交叉 G++ 链接器
g++ -L/usr/local/cuda/lib64/ -L"/home/smilart/0_Intall/1 caffe-rc3/build/lib/" -o "Test_Caffe" ./src/Test_Caffe.o -lboost_system -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
不在动态加载程序(加载动态库)查找的标准库搜索路径中。
这个问题基本上有四种解法:
将库(和 headers)安装到系统目录中,系统加载程序会在其中查找库。然后重建。
通过编辑 /etc/ld.so.conf
和 运行 ldconfig
程序,将目录 /home/smilart/0_Intall/1 caffe-rc3/build/lib
添加到加载程序查找的路径。
修改环境变量 LD_LIBRARY_PATH
以包含 /home/smilart/0_Intall/1 caffe-rc3/build/lib
。不过很少有人推荐这个解决方案。
修改构建命令,以便链接器在可执行文件中嵌入库的正确路径。这必须通过将 -Wl,-rpath,/home/smilart/0_Intall/1 caffe-rc3/build/lib
添加到链接器命令行来完成。这是在链接器的 Eclipse 项目设置中的某处完成的。
我推荐最后一种方案。
只是为了另一种选择,您可以使用 nsight - 一个 eclipse 版本的 nvidia corporated。这是来自 caffe offical github 的一些说明:https://github.com/BVLC/caffe/wiki/IDE---Nvidia%E2%80%99s-Eclipse-Nsight
我正在尝试 运行 我使用 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。 当我使用来自 caffe 库的其他 class\function... 等时,不会产生此错误。
我使用 IDE: Eclipse 来构建项目。来自控制台的一些报告:
全部
构建文件:../src/Test_Caffe.cpp
调用:交叉 G++ 编译器
g++ -I"/home/smilart/0_Intall/1 caffe-rc3/include/" -I/usr/local/cuda-7.5/include/ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Test_Caffe.d" -MT"src/Test_Caffe.o" -o "src/Test_Caffe.o" "../src/Test_Caffe.cpp"
完成建筑:../src/Test_Caffe.cpp
建设目标:Test_Caffe
调用:交叉 G++ 链接器
g++ -L/usr/local/cuda/lib64/ -L"/home/smilart/0_Intall/1 caffe-rc3/build/lib/" -o "Test_Caffe" ./src/Test_Caffe.o -lboost_system -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
不在动态加载程序(加载动态库)查找的标准库搜索路径中。
这个问题基本上有四种解法:
将库(和 headers)安装到系统目录中,系统加载程序会在其中查找库。然后重建。
通过编辑
/etc/ld.so.conf
和 运行ldconfig
程序,将目录/home/smilart/0_Intall/1 caffe-rc3/build/lib
添加到加载程序查找的路径。修改环境变量
LD_LIBRARY_PATH
以包含/home/smilart/0_Intall/1 caffe-rc3/build/lib
。不过很少有人推荐这个解决方案。修改构建命令,以便链接器在可执行文件中嵌入库的正确路径。这必须通过将
-Wl,-rpath,/home/smilart/0_Intall/1 caffe-rc3/build/lib
添加到链接器命令行来完成。这是在链接器的 Eclipse 项目设置中的某处完成的。
我推荐最后一种方案。
只是为了另一种选择,您可以使用 nsight - 一个 eclipse 版本的 nvidia corporated。这是来自 caffe offical github 的一些说明:https://github.com/BVLC/caffe/wiki/IDE---Nvidia%E2%80%99s-Eclipse-Nsight