Issue 1:
System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): No -- using https://github.com/tensorflow/custom-op (But it breaks for addons too)

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu16.04

TensorFlow installed from (source or binary): Binary

TensorFlow version (use command below): tf-nightly & tf-nighty-2.0-preview

Describe the current behavior

Currently when I build a custom op in the tensorflow/tensorflow:custom-op-ubuntu16 docker image using the defined steps I get an install-able pip package tensorflow_zero_out-0.0.1-cp27-cp27mu-linux_x86_64.whl

This works fine, however if I repair that wheel to be manylinux2010 compliant, then tf.load_op_library will fail to find the custom-op.

python -c "import tensorflow as tf; print(dir(tf.load_op_library('manylinux/tensorflow_zero_out/python/ops/_zero_out_ops.so')))"

['LIB_HANDLE', 'OP_LIST', 'ZeroOut', '_IS_TENSORFLOW_PLUGIN',
'_InitOpDefLibrary', '__builtins__', '__doc__', '__name__', '__package__',
'_collections', '_common_shapes', '_context', '_core', '_dispatch', '_doc_controls',
'_dtypes', '_errors', '_execute', '_kwarg_only', '_op_def_lib', '_op_def_library',
'_op_def_pb2', '_op_def_registry', '_ops', '_pywrap_tensorflow', '_six',
'_tensor_shape', 'deprecated_endpoints', 'tf_export', 'zero_out',
'zero_out_eager_fallback']

python -c "import tensorflow as tf;print(dir(tf.load_op_library('manylinux2010/tensorflow_zero_out/python/ops/_zero_out_ops.so')))"

['LIB_HANDLE', 'OP_LIST', '_IS_TENSORFLOW_PLUGIN',
'_InitOpDefLibrary', '__builtins__', '__doc__', '__name__', '__package__',
'_collections', '_common_shapes', '_context', '_core',
'_dispatch', '_doc_controls', '_dtypes', '_errors', '_execute', '_kwarg_only',
'_op_def_lib', '_op_def_library', '_op_def_pb2', '_op_def_registry', '_ops',
'_pywrap_tensorflow', '_six', '_tensor_shape', 'deprecated_endpoints', 'tf_export']

Notice 'zero_out' & 'zero_out_eager_fallback' are not found in the loaded library for manylinux2010

Code to reproduce the issue

git clone https://github.com/tensorflow/custom-op.git && cd custom-op
docker run -it --rm -v ${PWD}:/workspace -w /workspace tensorflow/tensorflow:custom-op-ubuntu16 /bin/bash

pip install tf-nightly
./configure.sh
bazel build build_pip_pkg
bazel-bin/build_pip_pkg artifacts

# Installed auditwheel is too old for manylinux2010
pip3 install --upgrade auditwheel

# Libtensorflow framework needs to be on LD path
export LD_LIBRARY_PATH="/usr/local/lib/python2.7/dist-packages/tensorflow_core"

# Repair logs look more or less okay
auditwheel -v repair --plat manylinux2010_x86_64 artifacts/tensorflow_zero_out-0.0.1-cp27-cp27mu-linux_x86_64.whl &> repair.txt

Other info / logs

Here are the auditwheel repair logs:

repair.txt

Here are the readelf inspections of the so files:

readelf.txt

readelf-manylinux2010.txt

Here are the so files:

so-files.zip

cc @perfinion @gunan @yifeif

--------------------------EDIT--------------------

Here are the extracted whl directories which will work with the python tf.load_op_library commands from above. (Manylinux2010 repair makes it so the custom op depends on a newly copied libtensorflow_framework.so which is part of the new whl):

custom-op-dirs.zip

Issue 2:
It seems if I have cpp custom op in a python function and I pass the python function to tf.data.Dataset.map it will crush.

If I only call this python function outside, It will be ok.

I've spend a whole afternoon to find the bug. I'm really mad about this bug.

Have I written custom code (as opposed to using a stock example script provided in TensorFlow):yes

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): linux ubuntu 18.04

TensorFlow installed from (source or binary):binary

TensorFlow version (use command below): 2.0b1

Python version:3.6

CUDA/cuDNN version:10/7.4

GPU model and memory:7.5/24gb

import tensorflow as tf
import pdb
extr_module = tf.load_op_library('./build/libextr_module.so')
res = extr_module.test_bug() # ok

def aaa(filename):
res = extr_module.test_bug() # Segmentation fault (core dumped)

return tf.zeros([1], tf.float32)

dataset = tf.data.TextLineDataset(['aaa']).map(aaa)

#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/framework/register_types.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/framework/tensor_shape.h"
#include "tensorflow/core/framework/register_types.h"
#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/shape_inference.h"
#include "tensorflow/core/util/work_sharder.h"

#include <iostream>
#include <cmath>

using namespace tensorflow;

REGISTER_OP("TestBug")
.Output("dummy: float")
.SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) {
c->set_output(0, c->MakeShape({1}));
return Status::OK();
});

class TestBugOp : public OpKernel
{
public:
explicit TestBugOp(OpKernelConstruction* context)
: OpKernel(context)
{

}

void Compute(OpKernelContext* context) override
{
Tensor* dummy = NULL;
OP_REQUIRES_OK(context, context->allocate_output(0, {1},
&dummy));
}
};

REGISTER_KERNEL_BUILDER(
Name("TestBug").Device(DEVICE_CPU),
TestBugOp
);

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(extr_module)

# compiler flags
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 ${OpenMP_CXX_FLAGS} -Wall -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -DGOOGLE_CUDA=1")

# TensorFlow dependencies
EXECUTE_PROCESS(COMMAND python3 -c "import os; os.environ['TF_CPP_MIN_LOG_LEVEL']='3'; import tensorflow as tf; print(tf.sysconfig.get_include(), end='', flush=True)" OUTPUT_VARIABLE TF_INC)

EXECUTE_PROCESS(COMMAND python3 -c "import os; os.environ['TF_CPP_MIN_LOG_LEVEL']='3'; import tensorflow as tf; print(tf.sysconfig.get_lib(), end='', flush=True)" OUTPUT_VARIABLE TF_LIB)

MESSAGE(STATUS "Found TF_INC: " ${TF_INC})
#MESSAGE(STATUS "Found TF_INC_EXTERNAL: " ${TF_INC}/external/nsync/public)
MESSAGE(STATUS "Found TF_LIB: " ${TF_LIB})

INCLUDE_DIRECTORIES(${TF_INC})
#INCLUDE_DIRECTORIES(${TF_INC}/external/nsync/public)
LINK_DIRECTORIES(${TF_LIB})

ADD_LIBRARY(extr_module SHARED
testbug.cc
)

TARGET_LINK_LIBRARIES(extr_module tensorflow_framework)