我有tensorflow二进制文件(已编译)我已添加到tensorflow源:tensorflow\core\user_ops\icp_op_kernel.cc
- 包含:https://github.com/tensorflow/models/blob/master/research/vid2depth/ops/icp_op_kernel.cc tensorflow\core\user_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,include目录位于:
C:\Program Files\PCL 1.6.0\include\pcl-1.6
我怎么告诉bazel还包括这个目录?
另外我可能需要在链接中添加C:\Program Files\PCL 1.6.0\lib
,我该怎么做?
如果失败,你不需要bazel
来构建操作。
我已经在CPU和GPU中实现了自定义操作,基本上遵循两个Tensorflow教程。
对于CPU操作,请按照Build the op library上的Tensorflow教程进行操作:
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
关于gcc
版本>=5
的注意事项:gcc从版本5开始使用新的C++ ABI
.TensorFlow网站上提供的二进制pip包是使用旧的ABI构建的gcc4。如果使用gcc>=5
编译op库,请将-D_GLIBCXX_USE_CXX11_ABI=0
添加到命令行以使库与旧的abi兼容。
对于GPU操作,请查看Tensorflow adding GPU op support上当前的官方GPU操作构建说明
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[@]}
如上所述,请注意,如果您的CUDA库未安装在/usr/local/lib64
中,则需要在上面的第二个(g ++)命令中明确指定路径。例如,如果您的CUDA安装在-L /usr/local/cuda-8.0/lib64/
中,请添加/usr/local/cuda-8.0
。
此外,请注意,在某些Linux设置中,需要使用nvcc编译步骤的其他选项。将-D_MWAITXINTRIN_H_INCLUDED
添加到nvcc命令行以避免来自mwaitxintrin.h
的错误。