最近在做深度网络相关的项目,我们通常可以从github上download很多相关的源码,但是在我们的机子上编译的时候通常会遇到很多问题,将我最近踩的坑做了一些总结,希望对大家有所帮助。
1.如果直接g++ ×××.cpp 出现下面或者是出现某种语法错误之类的
[Click and drag to move]
一般来说是你的编译器没有满足c++11规则,此时一般要加上-std=c++11
2.好吧,你心想加上就好了,于是 g++ ×××.cpp -std=c++11于是出现了:
××××××cannot find caffe/caffe.h:×××××××
这时候你想起来了你caffe的库目录和你系统默认的包含库目录不一致,链接库也是不一样的,然后你就想加进来啊
于是:
g++ ××××.cpp -std=c++11 -I /path/to/caffe/include -L/path/to/caffe/build/lib/
结果还是不行,又一大堆啥没定义。。。
这时候那个气啊
其实我们可以这么做
1.确保本机安装caffe
参考:https://blog.csdn.net/QLULIBIN/article/details/80722788 从第7点开始看,特别注意的是那些依赖库没装的要记得装上
当然你可以参考官网:http://caffe.berkeleyvision.org/installation.html
记得测试下再进行下一步
2.确保安装openblas
参考:https://blog.csdn.net/y5492853/article/details/79558194
3.进入/caffe/path/include/caffe 查看是否有proto文件夹
如果没有的话:
将/caffe/path/build/src/caffe/ 下的proto 文件夹拷贝到上述目录下
4.1 将/caffe/path/build/lib/libcaffe.so与libcaffe.so.1.0.0-rc3复制到 /usr/lib下
4.2 将/caffe/path/include/下的整个caffe文件夹复制到 /usr/include 下
5.执行文件夹内的makefile(记得对照修改相应库目录,动态链接库)
makefile文件可以参照:
CC= g++
CFLAGS = -O3 -std=c++11
#CFLAGS = -ggdb
INCS = `pkg-config --cflags opencv`
LIBS = `pkg-config --libs opencv`
LIBS+=-lboost_system -lcaffe -lglog
OBJS = mtcnn.o
BIN =a
INCS+=-I/usr/local/inluce #/path/to/openblas'inclue
LIBS+=-L /usr/local/lib #/path/to/openblas'lib
all : $(BIN)
a: $(OBJS)
$(CC) $(OBJS) -o $@ $(LIBS)
%.o:%.cpp
$(CC) $(CFLAGS) $(INCS) -c $<
clean:
rm -f $(OBJS) $(BIN)
然后
make
6.不出意外应该可以了
附:如果出现××× DSO is missing 首先locate下该文件,如果存在,那就是放的位置不对,因为该文件的链接路径是/usr/lib
所以你得拷过来
如果出现某种语法不符合规则,那应该加上c++11的标准
如果出现一大堆的。。。。找不到之类的,别怀疑,肯定不是代码问题,这时候应该去找下你libs有没有包含该库。没有的话
在makefile 文件中LIBS+=-l*** 就可以了~~