tf编译pointnet2-master中sampling层

1 .\tf_ops\sampling\文件夹下

tf编译pointnet2-master中sampling层_第1张图片

打开tf_sampling_compile.sh

修改几个参数

#/bin/bash
/usr/local/cuda/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC

TF_ROOT=./venv/lib/python3.6/site-packages/tensorflow
# TF1.2
#g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I ${TF_ROOT}/include -I /usr/local/cuda/include -lcudart -L /usr/local/cuda/lib64/ -O2 -D_GLIBCXX_USE_CXX11_ABI=0


# TF1.4
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I ${TF_ROOT}/include -I /usr/local/cuda/include -I ${TF_ROOT}/include/external/nsync/public -lcudart -L /usr/local/cuda/lib64/ -L ${TF_ROOT}  -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0

添加一个

TF_ROOT=./venv/lib/python3.6/site-packages/tensorflow

后面修改路径比较方便,把所有用到tensorflowd地方都改成TF_ROOT路径。找准你要用地python的路径,我在虚拟环境下用python,因此要写虚拟环境的路径。还有CUDA的路径也要和自己的CUDA路径一致,一般/usr/local/cuda/bin/version.txt可以查看cuda版本。

tensorflow和cuda的对应版本关系如下

https://stackoverflow.com/questions/50622525/which-tensorflow-and-cuda-version-combinations-are-compatible

tf1.4以上的版本都可以用tf1.4 那段代码编译,如果编译不通过,就查一下g++和tensorflow版本的关系吧。

编译成功后运行报错:

① tf_sampling_so.so: undefined symbol: _ZTIN10tensorflow8OpKernelE

这个错误是tf的编译语句的版本和你自己的tf的版本不对应,导致的有些symbol不能识别。tf1.4以上打开tf1.4的注释,否则用tf1.2

愚蠢的错误:

如果编译之后tf_sampling_so.so报错,那么删除这个文件,再编译。不然可能不会替换这个文件,就算按照上面的改了还是报错,反复尝试很多遍,知道删除重编才好了……

你可能感兴趣的:(tensorflow,linux)