2016-09-20 87 views
1

我试图用朱古力运行我的简单的程序简单的C++ PROGRAMM我得到了一个错误运行使用来自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); 
} 

它是没有问题的建成,但是当我运行程序时出现错误: 符号查找错误:/家/ parrot/eclipse/workspace/Test_Caffe/Debug/Test_Caffe:undefined symbol:_ZN5caffe3NetIfEC1ERKSsNS_5PhaseEPKS1_

我注意到:当我在代码中使用caffe :: TEST或caffe :: TRAIN时出现问题。我认为存在一些问题:caffe :: Phase。所以我不能创建caffe :: Net,因为我不能使用caffe :: TEST。 当我从caffe库使用其他类\函数等时,没有产生这个错误。

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

使所有
大厦文件:../src/Test_Caffe.cpp 调用:跨G ++编译器
G ++ -I“的/ home/smilart/0_Intall/1朱古力-RC3 /包括/ “-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 ++链接器
克++ -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

回答

0

目录/home/smilart/0_Intall/1 caffe-rc3/build/lib是不是在标准库搜索路径是动态加载(加载动态库)看起来

有basiclaly四种解决方案,这一问题:。

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

我推荐最后的解决方案。

+0

谢谢!在发布这个问题之前,我尝试了第一个3解决方案,但它没有帮助。此外,我没有找到在Eclipse中添加完全'-Wl,-rpath,/ home/smilart/0_Intall/1 caffe-rc3/build/lib'的选项(有几个安静的不同,他们没有帮我) ,所以我用命令行中的这个选项启动g ++ ......并且它是工作的! –