关于pointnet++系列编译文件(tf_ops)的问题

  • 点云分割与处理以pointnet系列为首,得到了比较好的成果,但是从pointnet++开始,作者开始在Ubuntu环境下进行网络训练,需要编写动态文件.so(包括后续的PointCNN、pointSift、ASIS、GSPN),使之很难迁移到Windows下进行。当然,点云剩余的其余算法(SGPN、DGCNN、PointGrid)可以在双系统环境下运行,不存在编译问题。
    由此以来编译时大问题,我在这里记录以下自己遇到的坑与解决方法,不敢保证都能解决。经过测试需要在Ubuntu下运行的代码经过编译均能在TensorFlow1.13.1包括及以下版本运行,TensorFlow1.14.0测试运行失败,是由于libtensorflow_framework.so.1这个文件的问题,在之前的版本都是libtensorflow_framework.so,在此版本进行了更改,故没有测试:

  • 第一、正确安装Tensorflow、Cuda、Cudnn和Python等运行环境,没有正确安装就可以skip所有以下步骤了。

  • 第二、Error1:libcudart.so.9.0: cannot open shared object file: No such file or
    directory,遇到这个问题基本说明你编译无问题,但是由于你编译制定的Cuda版本和TensorFlow运行的cuda版本不一致,需要匹配,故跳到第一步检查。

  • 第三、Error 2 series:error in NotFoundError:/home/fussen/Work_Area/02_DGASIS/utils/tf_ops/grouping/tf_grouping_so.so:
    undefined symbol:_ZN10tensorflow6StatusC1ENS_5error4CodeENS_11StringPieceE。遇到这系列问题,首先恭喜你环境安装正确,但是编译出了问题,这里需要首先指出cuda正确位置和Python正确位置(anoconda虚拟环境需要现在终端激活后运行),其次把“-D_GLIBCXX_USE_CXX11_ABI=0”这句抹掉或者0编程1,然后进行编译。基本运行不会有问题,还出现问题就按照一二步好好检查。

  • 虽然官网指出,但gcc版本大于4的时候需要设置-D_GLIBCXX_USE_CXX11_ABI=0.因为官方说明TensorFlow安装包是基于GCC4建立而且使用的是旧的ABI。对于GCC5之后的版本,为了与旧版的ABI兼容,使用“D_GLIBCXX_USE_CXX11_ABI=0". ABI兼容性可确保针官方TensorFlow软件包构建的自定义操作与GCC 5内置软件包一起使用。
    但是!!!,who kowns,兼容性方面真是这么奇葩。之前遇到问题百度和博客均没能给我提供解答,这里把点云系列都一起说明一下。希望对后续研究点云算法的有所帮助。

你可能感兴趣的:(Tensorflow,TensorFlow,pointnet,tf_ops编译)