faster_rcnn_tensorflow make.sh文件

从github上下载faster rcnn项目进行编译(make)时,遇到了很多问题,查了很多的博客,花了很多的时间。有些说这样改,有些说,那样改。改来改去,根本不懂得参数的意义,也没有解决问题。

主要遇到的问题有:

  • g++: error: roi_pooling_op.cu.o: No such file or directory

    解决方法:

    (1)export PATH=/usr/local/cuda-9.0/bin/
    (2)在$FRCN_ROOT/lib/ make.sh 文件中,修改 CXXFLAGS 参数

  • undefined symbol: _ZTIN10tensorflow8OpKernelE

    解决方法:

    (1)添加TF_LIB编译时链接库

    (2)修改参数 -D_GLIBCXX_USE_CXX11_ABI

一怒之下,花时间简单学习了下bash和gcc,主要是学习那些参数到底是什么意思!!!

#!/usr/bin/env bash
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')

CUDA_PATH=/usr/local/cuda-9.0/
CXXFLAGS=''

# CXXFLAGS+='-undefined dynamic_lookup' 适用于mac系统
# CXXFLAGS+='-D_MWAITXINTRIN_H_INCLUDED' 适用于ubuntu系统
if [[ "$OSTYPE" =~ ^darwin ]]; then
	CXXFLAGS+='-D_MWAITXINTRIN_H_INCLUDED'
fi

cd roi_pooling_layer

if [ -d "$CUDA_PATH" ]; then # 如果CUDA_PATH存在 执行下面的语句
	nvcc -std=c++11 -c -o roi_pooling_op.cu.o roi_pooling_op_gpu.cu.cc \
		-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \
		-arch=sm_61

    # -D_GLIBCXX_USE_CXX11_ABI=0 是对于GCC-5以上的版本的  GCC-5以下版本不需要该参数
    # 详情参考:https://developers.redhat.com/blog/2015/02/05/gcc5-and-the-c11-abi/
    # https://blog.csdn.net/nkconst/article/details/77972756
    # -L/-l 添加链接库
    # -o 输出
    # -D 预定义一个宏
	g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc \
		roi_pooling_op.cu.o -I $TF_INC -L $TF_LIB -ltensorflow_framework -D GOOGLE_CUDA=1 -fPIC $CXXFLAGS \
		-lcudart -L $CUDA_PATH/lib64
	else
	g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=0 -o roi_pooling.so roi_pooling_op.cc \
		-I $TF_INC -fPIC $CXXFLAGS
fi

cd ..

cd psroi_pooling_layer
if [ -d "$CUDA_PATH" ]; then
nvcc -std=c++11 -c -o psroi_pooling_op.cu.o psroi_pooling_op_gpu.cu.cc \
		-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \
		-arch=sm_61

	g++ -std=c++11 -shared -o psroi_pooling.so psroi_pooling_op.cc \
		psroi_pooling_op.cu.o -I $TF_INC -L $TF_LIB -ltensorflow_framework -D GOOGLE_CUDA=1 -fPIC $CXXFLAGS \
		-lcudart -L $CUDA_PATH/lib64
	else
	g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=0 -o psroi_pooling.so psroi_pooling_op.cc \
		-I $TF_INC -fPIC $CXXFLAGS
fi

cd ..
#cd feature_extrapolating_layer

#nvcc -std=c++11 -c -o feature_extrapolating_op.cu.o feature_extrapolating_op_gpu.cu.cc \
#	-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC -arch=sm_50

#g++ -std=c++11 -shared -o feature_extrapolating.so feature_extrapolating_op.cc \
#	feature_extrapolating_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64
#cd ..

你可能感兴趣的:(faster,rcnn,make,faster,rcnn,tensorflow,undefined,symbol:)