我正在尝试使用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库中的其他类\ function ...等时,没有产生此错误。
我使用IDE:Eclipse来构建项目。一些来自控制台的报告:
使所有人
构建文件:../ src / Test_Caffe.cpp
调用:Cross G ++编译器
g ++ -I&#34; / home / smilart / 0_Intall / 1 caffe-rc3 / include /&#34; -I / usr / local / cuda-7.5 / include / -O0 -g3 -Wall -c -fmessage-length = 0 -MMD -MP -MF&#34; src / Test_Caffe.d&#34; -MT&#34; SRC / Test_Caffe.o&#34; -o&#34; src / Test_Caffe.o&#34; &#34; ../的src / Test_Caffe.cpp&#34;
完工建筑:../ src / Test_Caffe.cpp
构建目标:Test_Caffe
调用:Cross G ++ Linker
g ++ -L / usr / local / cuda / lib64 / -L&#34; / home / smilart / 0_Intall / 1 caffe-rc3 / build / lib /&#34; -o&#34; Test_Caffe&#34; ./src/Test_Caffe.o -lboost_system -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lcudart -lcublas -lcurand -lboost_filesystem -lglog -lprotobuf -lcaffe
完成建筑目标:Test_Caffe
答案 0 :(得分:0)
目录/home/smilart/0_Intall/1 caffe-rc3/build/lib
不在动态加载程序(加载动态库)查找的标准库搜索路径中。
这个问题基本上有四种解决方案:
将库(和标题)安装到系统目录中,系统加载器在其中查找库。然后重建。
通过编辑/home/smilart/0_Intall/1 caffe-rc3/build/lib
并运行/etc/ld.so.conf
程序,将目录ldconfig
添加到加载程序查找的路径中。
修改环境变量LD_LIBRARY_PATH
以包含/home/smilart/0_Intall/1 caffe-rc3/build/lib
。很少有人推荐这个解决方案。
修改构建命令,以便链接器在可执行文件中嵌入正确的库路径。这必须通过将-Wl,-rpath,/home/smilart/0_Intall/1 caffe-rc3/build/lib
添加到链接器命令行来完成。这是在链接器的Eclipse项目设置中的某处完成的。
我推荐最后一个解决方案。
答案 1 :(得分:0)
只是换另一种选择,你可以使用nsight - 一个eclipse版本的nvidia公司。这是来自caffe官方github的一些指示:https://github.com/BVLC/caffe/wiki/IDE---Nvidia%E2%80%99s-Eclipse-Nsight