libstr_avx_op.so: undefined symbol OpKernelContext::CtxFailureWithWarning on TF 2.14 (prebuilt ops/2.12 copied to ops/2.14)
- Dominant language
- Python
- Stars
- 2.4k
- Forks
- 383
- PR merge metrics
- No merged PRs in 30d
Description
libstr_avx_op.so: undefined symbol OpKernelContext::CtxFailureWithWarning on TF 2.14 (prebuilt ops/2.12 copied to ops/2.14)
**Error message:**
```
load avx string_split op failed: .../easy_rec/python/ops/2.14/libstr_avx_op.so: undefined symbol: _ZN10tensorflow15OpKernelContext21CtxFailureWithWarningEPKciRKN3tsl6StatusE
```
### Environment
- OS: Linux x86_64
- Python: 3.10
- TensorFlow: **2.14.0** (Intel Extension for TensorFlow / `tf-intel` conda env)
- EasyRec: **0.8.5** (from `alibaba/EasyRec`, `easy_rec/python/ops` layout)
- Ops directory: `easy_rec` resolves `get_ops_dir()` to `.../python/ops/2.14`. We populated `2.14` by copying prebuilt artifacts from **`ops/2.12`** in the same repo (there is no `2.14` folder upstream).
### Steps to reproduce
1. Install TF 2.14 (e.g. Intel build) and EasyRec from this repo.
2. Ensure `libstr_avx_op.so` is present under `easy_rec/python/ops//` (e.g. copy from `ops/2.12` to `ops/2.14` if needed).
3. `import easy_rec` (or import path that loads `gen_str_avx_op.py`).
4. Observe warning / failed `load_op_library` with the symbol above.
### Expected behavior
Either:
- Prebuilt `libstr_avx_op.so` **matches** the documented TF versions (e.g. explicit matrix: TF version ↔ ops tarball), **or**
- **Source code** for `libstr_avx_op` (and build instructions / Bazel or `g++` recipe) is published so users can rebuild against their exact TF (including Intel TF) ABI, **or**
- Documentation states that `libstr_avx_op` is only supported for specific TF builds and unsupported combinations should remove the `.so` to avoid load errors.
### Actual behavior
`tf.load_op_library` fails with **undefined symbol**; AVX string split op is not loaded.
### Additional context
- In the open-source tree, `easy_rec/python/ops/src/` only contains `load_kv_embed.cc` / `load_dense_embed.cc`. There is **no** public C++ source for `libstr_avx_op.so` or `libcustom_ops.so`, so we cannot rebuild those ops locally against TF 2.14.
- Similar ABI issues have been seen for other prebuilt `.so` files when TF or vendor build differs.
### Request
1. Please clarify whether **`libstr_avx_op.so` sources** can be open-sourced or if **TF2.14 (and/or Intel TF)**-compatible prebuilts will be provided.
2. If prebuilts only target specific TF minors (e.g. 2.12), please document that explicitly and ideally ship a **`ops/2.14`** (or versioned) directory that matches **stock TF 2.14** and/or document Intel TF compatibility.
Thank you.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reading easy_rec/python/ops/gen_str_avx_op.py and the get_ops_dir() logic, then reproduce the tf.load_op_library failure with the artifact in python/ops/2.14 copied from ops/2.12. Compare the available ops directories and python/ops/src; done means providing a compatible artifact or source/build path, or documenting the supported TensorFlow versions and unsupported combinations.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, tensorflow
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100