python - 未定义符号:THPVariableClaload_textures.cpython-37m-x86_64-linux-gnu.so:未定义符号:THPVariableClass
问题描述
你知道我怎么能解决这个问题吗?我正在尝试使用https://github.com/benjiebob/SMALViewer/issues/3存储库,但是在神经渲染器端口上出现错误:
$ python smal_viewer.py
Traceback (most recent call last):
File "smal_viewer.py", line 2, in <module>
import pyqt_viewer
File "/home/mona/research/3danimals/SMALViewer/pyqt_viewer.py", line 13, in <module>
from smal.smal3d_renderer import SMAL3DRenderer
File "/home/mona/research/3danimals/SMALViewer/smal/smal3d_renderer.py", line 6, in <module>
import neural_renderer as nr
File "/home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/__init__.py", line 3, in <module>
from .load_obj import load_obj
File "/home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/load_obj.py", line 8, in <module>
import neural_renderer.cuda.load_textures as load_textures_cuda
ImportError: /home/mona/anaconda3/lib/python3.7/site-packages/neural_renderer/cuda/load_textures.cpython-37m-x86_64-linux-gnu.so: undefined symbol: THPVariableClass
以下是一些细节:
$ python
Python 3.7.6 (default, Jan 8 2020, 19:59:22)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.6.0'
>>> torch.version.cuda
'10.1'
>>> torch.cuda.is_available()
True
$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ lsb_release -a
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
这是神经渲染器 git repo:https ://github.com/daniilidis-group/neural_renderer
我使用安装了神经渲染器pip install neural_renderer_pytorch
解决方案
看起来你不是neural_renderer_pytorch
自己建造的,而是用了一个轮子。但是,此轮子是使用旧pytorch
版本构建的,不适pytorch
用于您机器上的当前版本。
neural_renderer
使用您当前的 pytorch-version从源代码构建(在neural_renderer
您现在卸载后),即
$ pip uninstall neural-renderer-pytorch
$ pip install https://github.com/daniilidis-group/neural_renderer/zipball/master
它应该可以工作。
在 pytorch 1.5 之前,它使用某种脆弱的方式在 Linux 上构建扩展:尽管依赖于torch
,但扩展并没有明确链接到libtorch.so
. 提供缺少的符号只是因为import torch
加载libtorch.so
了RTLD_GLOBAL
,因此使其符号全局可见/可访问 - 这就是为什么在加载这些扩展之前(例如neural_renderer_pytorch
这里)必须导入的原因torch
。
可以在第一次RTLD_GLOBAL
导入之前torch
强制执行旧的行为设置:
import sys; import ctypes;
sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL)
import torch # now all symbols of torch
# have global visibility and can be used in
# other extensions
但是,使用RTLD_GLOBAL
是非常危险的,因为它可能会插入不相关的符号并导致细微的错误甚至崩溃。
因此,由于 1.5 pytorch 不再使用RTLD_GLOBAL
,但明确链接libpytorch.so
(请参阅此提交)和使用旧 pytorch 版本构建的扩展将不起作用。
推荐阅读
- apache - 为什么apache在使用Require ip时会给出503s?
- python - Docker Container 正在运行,但 docker 内的程序突然停止
- c# - WPF C#如何使用Text属性在TextBlock中设置格式化文本
- r - Detect if string contains one period and mutate new column in R
- java - 获取 java.lang.NoSuchMethodException: javax.validation.Valid.value() 在 RestController 中绑定 JSON 请求时出错
- php - 用php创建变量的链接
- gdb - LLVM IR:向 GDB 公开变量?
- c++ - 私有静态变量:标头声明/.cpp 定义与文件范围
- ios - 一段时间后,健康应用程序忽略步骤
- python - 如何“自动发现” admin.py 文件的不同位置?