Python3.4 错误 - 无法启用可执行堆栈,因为共享对象需要:参数无效
Python3.4 error - Cannot enable executable stack as shared object requires: Invalid argument
我一直在尝试在 Windows(Windows Linux、wsl 的子系统)环境中的 Bash 环境中安装 OpenCV证明很难。
我想我已经很接近了,但是在输入 python 后,import cv2
给出了以下错误:
ImportError: libopencv_core.so.3.1: cannot enable executable stack as shared object requires: Invalid argument
如何使库在堆栈上执行?
我的 OpenCV *opencv*.so*
库文件位于 /usr/local/lib/
。在正常的 Linux 环境中,我会授予这些库使用
在堆栈上执行的能力
execstack -c /usr/local/lib/*opencv*.so*
然而,即使我可以成功下载 execstack
包,它不是一个可识别的命令,我可以 运行 允许在堆栈上执行。我怀疑这与 Data Execution Prevention 有关,Window 的 Exec-Shield 版本可以防止堆栈粉碎攻击。
但也许我离问题太近了,无法找出问题所在。为什么我不能导入这个 python 包?我正在使用 Python v3.4 和从 latest source code (v.3.1) 编译的 OpenCV。
目前有很多东西根本不起作用,因为有未实现的系统调用(WSL 只覆盖了部分,只有大约 70% 的系统调用实现了,其中一些只实现了部分),或者缺少套接字模式和选项(WSL 尚不支持 Unix 数据报套接字,尽管它应该在下一个内部版本中可用)。
如果您转到 github (BashOnWindows) 和 post strace 或搜索您的问题并找到它的副本,这是获得答案的最佳方式。从事此项目的 Microsoft 团队需要大量的反馈和错误测试。
明确地说,我是说您已 100% 运行 投入尚未实施的内容。但是,如果您查看 .so 文件的源代码以禁用使用该系统调用的代码部分,可能有一种方法(因为 Python 是跨平台的,并非所有 Linux 系统调用都受支持跨所有 *nix 操作系统)。
我也遇到了同样的问题,但我可以通过重新安装来解决它
$ sudo apt-get install execstack
和上面Windows10 build 14393.479
中提到的注释
我解决了这个问题:tatsuya-y.hatenablog.com
我使用 windows bash 并通过 conda install -c menpo opencv3=3.1.0
安装 opencv
然后我得到了这个 (python 2.7)
>>>import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_ccalib.so.3.1: cannot enable executable stack as shared object requires: Invalid argument
我用execstack
命令解决
sudo apt-get install execstack
sudo execstack -c $HOME/anaconda2/lib/libopencv_*
然后sudo apt-get install gtk2.0-0
问题解决了! >>> cv2.__version__
'3.1.0'
请记住,如果按照在线安装说明进行操作,opencv 库会安装到 /usr/local/lib。因此,命令将是:
sudo execstack -c /usr/local/lib/libopencv_*
您可以使用 execstack 安装 opencv,甚至导入库。然而,对于视频捕获,如 cv2.VideoCapture(0),bash 对 windows 将不起作用。您需要安装完整的发行版。
我一直在尝试在 Windows(Windows Linux、wsl 的子系统)环境中的 Bash 环境中安装 OpenCV证明很难。
我想我已经很接近了,但是在输入 python 后,import cv2
给出了以下错误:
ImportError: libopencv_core.so.3.1: cannot enable executable stack as shared object requires: Invalid argument
如何使库在堆栈上执行?
我的 OpenCV *opencv*.so*
库文件位于 /usr/local/lib/
。在正常的 Linux 环境中,我会授予这些库使用
execstack -c /usr/local/lib/*opencv*.so*
然而,即使我可以成功下载 execstack
包,它不是一个可识别的命令,我可以 运行 允许在堆栈上执行。我怀疑这与 Data Execution Prevention 有关,Window 的 Exec-Shield 版本可以防止堆栈粉碎攻击。
但也许我离问题太近了,无法找出问题所在。为什么我不能导入这个 python 包?我正在使用 Python v3.4 和从 latest source code (v.3.1) 编译的 OpenCV。
目前有很多东西根本不起作用,因为有未实现的系统调用(WSL 只覆盖了部分,只有大约 70% 的系统调用实现了,其中一些只实现了部分),或者缺少套接字模式和选项(WSL 尚不支持 Unix 数据报套接字,尽管它应该在下一个内部版本中可用)。
如果您转到 github (BashOnWindows) 和 post strace 或搜索您的问题并找到它的副本,这是获得答案的最佳方式。从事此项目的 Microsoft 团队需要大量的反馈和错误测试。
明确地说,我是说您已 100% 运行 投入尚未实施的内容。但是,如果您查看 .so 文件的源代码以禁用使用该系统调用的代码部分,可能有一种方法(因为 Python 是跨平台的,并非所有 Linux 系统调用都受支持跨所有 *nix 操作系统)。
我也遇到了同样的问题,但我可以通过重新安装来解决它
$ sudo apt-get install execstack
和上面Windows10 build 14393.479
中提到的注释我解决了这个问题:tatsuya-y.hatenablog.com
我使用 windows bash 并通过 conda install -c menpo opencv3=3.1.0
安装 opencv
然后我得到了这个 (python 2.7)
>>>import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_ccalib.so.3.1: cannot enable executable stack as shared object requires: Invalid argument
我用execstack
命令解决
sudo apt-get install execstack
sudo execstack -c $HOME/anaconda2/lib/libopencv_*
然后sudo apt-get install gtk2.0-0
问题解决了! >>> cv2.__version__
'3.1.0'
请记住,如果按照在线安装说明进行操作,opencv 库会安装到 /usr/local/lib。因此,命令将是:
sudo execstack -c /usr/local/lib/libopencv_*
您可以使用 execstack 安装 opencv,甚至导入库。然而,对于视频捕获,如 cv2.VideoCapture(0),bash 对 windows 将不起作用。您需要安装完整的发行版。