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 将不起作用。您需要安装完整的发行版。