pointnet++编译运行报错undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs的问题解决

环境:ubuntu16.04 tensorflow=1.13.1 anaconda python=3.7
我在修改了tf_ops下的3d_interpolation、grouping、sampling 的三个文件夹下的各自.sh文件的路径后,成功编译生成了对应的.so文件。满心欢喜的运行train.py是时却又碰到了问题。pointnet++编译运行报错undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs的问题解决_第1张图片
tf_sampling_so.so报了一个问题:
undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs

在作者的github上找到了有人与我有同样的问题。
如果你的gcc版本大于 4,则不需要选项-D_GLIBCXX_USE_CXX11_ABI = 0。

查看gcc的版本,我的为5.4.0
在这里插入图片描述
所以,我们在tf_sampling_compile.sh中去掉该选项,以我的为例,修改后:

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

#TF1.4
CUDA_ROOT=/usr/local/cuda-10.0
TF_ROOT=/home/jinye/anaconda3/envs/tensorflow-gpu/lib/python3.7/site-packages/tensorflow
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I ${TF_ROOT}/include -I ${CUDA_ROOT}/include -I ${TF_ROOT}/include/external/nsync/public -lcudart -L ${CUDA_ROOT}/lib64/ -L ${TF_ROOT} -ltensorflow_framework -O2 #-D_GLIBCXX_USE_CXX11_ABI=0

重新运行后,该问题得到解决。
github对应大神的解决方案:https://github.com/charlesq34/pointnet2/issues/48

你可能感兴趣的:(pointcloud,pointnet++)