小编典典

Python3.4错误-无法作为共享对象要求启用可执行堆栈:无效的参数

python

我一直试图在Windows(适用于Linux的Windows子系统,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软件包,也无法运行该命令以允许在堆栈上执行。我怀疑这与Windows的Exec-Shield版本的Data
Execution Prevention有关,可以防止堆栈破坏攻击。

但是也许我只是太接近问题而无法找出问题所在。为什么我不能导入此python包?我正在使用从最新源代码(v.3.1)编译的Python
v3.4和OpenCV 。


阅读 133

收藏
2021-01-20

共1个答案

小编典典

我按照以下步骤解决了这个问题:tatsuya-y.hatenablog.com

我使用Windows bash并安装了opencv,conda install -c menpo opencv3=3.1.0 然后我得到了(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_*
2021-01-20