如何使用带有附加include目录的bazel构建TensorFlow op

如何使用带有附加include目录的bazel构建TensorFlow op,tensorflow,bazel,Tensorflow,Bazel,我得到了tensorflow二进制文件(已经编译) 我在tensorflow源中添加了: tensorflow\core\user\u ops\icp\u op\u kernel.cc-包含: tensorflow\core\user\u ops\BUILD-包含: load("//tensorflow:tensorflow.bzl", "tf_custom_op_library") tf_custom_op_library( name = "icp_op_kernel.so",

我得到了tensorflow二进制文件(已经编译) 我在tensorflow源中添加了:
tensorflow\core\user\u ops\icp\u op\u kernel.cc
-包含:
tensorflow\core\user\u ops\BUILD
-包含:

load("//tensorflow:tensorflow.bzl", "tf_custom_op_library")

tf_custom_op_library(
    name = "icp_op_kernel.so",
    srcs = ["icp_op_kernel.cc"],
)
我正试图通过以下方式构建:

bazel build --config opt //tensorflow/core/user_ops:icp_op_kernel.so
我得到:

tensorflow/core/user_ops/icp_op_kernel.cc(16): fatal error C1083: Cannot open include file: 'pcl/point_types.h': No such file or directory
因为bazel不知道pcl包含文件在哪里。 我已安装pcl,包含目录位于:

C:\Program Files\PCL 1.6.0\include\pcl-1.6
我如何告诉bazel也包括这个目录


此外,我可能需要将
C:\Program Files\PCL 1.6.0\lib
添加到链接中,我该怎么做?

如果构建ops失败,您不需要
bazel

我已经在CPU和GPU中实现了定制的ops,并且基本上遵循了两个Tensorflow教程

对于CPU操作,请遵循以下Tensorflow教程:

关于
gcc
版本
=5
:gcc使用自版本5以来的新
C++ABI
。TensorFlow网站上提供的二进制pip包是使用使用旧ABI的gcc4构建的。如果使用
gcc>=5
编译op库,请将
-D_GLIBCXX_USE_cx11_ABI=0
添加到命令行,以使库与旧ABI兼容

对于GPU操作,请查看上的当前官方GPU操作构建说明

如上所述,请注意,如果CUDA库未安装在
/usr/local/lib64
中,则需要在上面的第二个(g++)命令中明确指定路径。例如,如果cuda安装在
/usr/local/cuda-8.0
中,请添加
-L/usr/local/cuda-8.0/lib64/


另外,请注意,在某些linux设置中,需要nvcc编译步骤的其他选项。将
-D_MWAITXINTRIN_H_INCLUDED
添加到nvcc命令行,以避免
MWAITXINTRIN.H
出现错误,如果构建操作失败,则不需要
bazel

我已经在CPU和GPU中实现了定制的ops,并且基本上遵循了两个Tensorflow教程

对于CPU操作,请遵循以下Tensorflow教程:

关于
gcc
版本
=5
:gcc使用自版本5以来的新
C++ABI
。TensorFlow网站上提供的二进制pip包是使用使用旧ABI的gcc4构建的。如果使用
gcc>=5
编译op库,请将
-D_GLIBCXX_USE_cx11_ABI=0
添加到命令行,以使库与旧ABI兼容

对于GPU操作,请查看上的当前官方GPU操作构建说明

如上所述,请注意,如果CUDA库未安装在
/usr/local/lib64
中,则需要在上面的第二个(g++)命令中明确指定路径。例如,如果cuda安装在
/usr/local/cuda-8.0
中,请添加
-L/usr/local/cuda-8.0/lib64/


另外,请注意,在某些linux设置中,需要nvcc编译步骤的其他选项。将
-D_MWAITXINTRIN_H_INCLUDED
添加到nvcc命令行,以避免
MWAITXINTRIN.H

产生错误,我实际上正在尝试在windows上构建它,我将尝试翻译你的建议。以下失败:
nvcc-std=c++11-c-o cuda\u op\u kernel.cu.o cuda\u op\u kernel.cu.cc-IC:\Users\dorp\Desktop\tensorflow-1.11.0-D_GLIBCXX\u USE\u cx11\u ABI=0-D GOOGLE\u cuda=1-x cu-Xcompiler-fPIC
错误:
C:/Users/dorp/Desktop/tensorflow-1.11.0\third\u party/eigen3/unsupported/Eigen/cx11/Tensor(1):致命错误C1083:无法打开包含文件:“unsupported/Eigen/cx11/Tensor”:没有这样的文件或目录
我实际上是在windows上构建它,我将尝试翻译你的建议。以下失败:
nvcc-std=c++11-c-o cuda\u op\u kernel.cu.o cuda\u op\u kernel.cu.cc-IC:\Users\dorp\Desktop\tensorflow-1.11.0-D_GLIBCXX\u USE\u cx11\u ABI=0-D GOOGLE\u cuda=1-x cu-Xcompiler-fPIC
错误:
C:/Users/dorp/Desktop/tensorflow-1.11.0\third\u party/eigen3/unsupported/Eigen/cx11/Tensor(1):致命错误C1083:无法打开包含文件:“unsupported/Eigen/cx11/Tensor”:没有此类文件或目录
TF_CFLAGS=( $(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') )
TF_LFLAGS=( $(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') )
g++ -std=c++11 -shared zero_out.cc -o zero_out.so -fPIC ${TF_CFLAGS[@]} ${TF_LFLAGS[@]} -O2
nvcc -std=c++11 -c -o cuda_op_kernel.cu.o cuda_op_kernel.cu.cc \
  ${TF_CFLAGS[@]} -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC

g++ -std=c++11 -shared -o cuda_op_kernel.so cuda_op_kernel.cc \
  cuda_op_kernel.cu.o ${TF_CFLAGS[@]} -fPIC -lcudart ${TF_LFLAGS[@]}