| FAQ | |
| --- | |
| Listed below are a number of common issues users face with the various parts of | |
| the C++ API. | |
| C++ Extensions | |
| ============== | |
| Undefined symbol errors from PyTorch/ATen | |
| ***************************************** | |
| **Problem**: You import your extension and get an ``ImportError`` stating that | |
| some C++ symbol from PyTorch or ATen is undefined. For example:: | |
| >>> import extension | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| ImportError: /home/user/.pyenv/versions/3.7.1/lib/python3.7/site-packages/extension.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN2at19UndefinedTensorImpl10_singletonE | |
| **Fix**: The fix is to ``import torch`` before you import your extension. This will make | |
| the symbols from the PyTorch dynamic (shared) library that your extension | |
| depends on available, allowing them to be resolved once you import your extension. | |
| I created a tensor using a function from ``at::`` and get errors | |
| **************************************************************** | |
| **Problem**: You created a tensor using e.g. ``at::ones`` or ``at::randn`` or | |
| any other tensor factory from the ``at::`` namespace and are getting errors. | |
| **Fix**: Replace ``at::`` with ``torch::`` for factory function calls. You | |
| should never use factory functions from the ``at::`` namespace, as they will | |
| create tensors. The corresponding ``torch::`` functions will create variables, | |
| and you should only ever deal with variables in your code. |