我正在学习如何在Google's tutorial之后向tensorflow添加操作,但遇到了一些麻烦。
我从Github克隆了源代码,并计划在Fact
中将tensorflow/core/user_ops/fact.cc
操作添加到框架中。以下是我的方法:
BUILD
中创建一个tensorflow/core/user_ops/
文件,内容为:load("//tensorflow:tensorflow.bzl", "tf_custom_op_library") tf_custom_op_library( name = "fact.so", srcs = ["fact.cc"] )
bazel build -c opt -s //tensorflow/core/user_ops:fact.so
这会在fact.so
bazel-bin/tensorflow/core/user_ops/
文件
将生成的fact.so
复制到我的Python项目中,该项目位于另一个不相关的位置。
在Python项目中,运行
import tensorflow as tf fact_module = tf.load_op_library('fact.so') with tf.Session(''): print(fact_module.fact2().eval())
结果是一个例外:
python(77790,0x7fff742f7000)malloc: *对象错误 0x1c890ffde89:未分配被释放的指针 * 在malloc_error_break中设置断点以调试Abort trap:6
但是,如果我使用clang ++直接构建操作,如:
clang ++ -std = c ++ 11 -shared tensorflow / core / user_ops / fact.cc -o 〜/ Desktop / fact.so -fPIC -I $ TF_INC -undefined dynamic_lookup
其中$ TF_INC由
计算TF_INC = $(python -c'import tensorflow as tf; 打印(tf.sysconfig.get_include())')
一切正常。
有人能告诉我为什么第一种方法失败了吗?