我一直试图在Windows(适用于Linux的Windows子系统,wsl)的Bash中安装OpenCV,事实证明这非常困难。
我想我已经很接近了,但是在输入python时,import cv2出现以下错误:
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环境中,我将授予这些库使用以下命令在堆栈上执行的功能:
*opencv*.so*
/usr/local/lib/
execstack -c /usr/local/lib/*opencv*.so*
但是,即使我可以成功下载该execstack软件包,也无法运行该命令以允许在堆栈上执行。我怀疑这与Windows的Exec-Shield版本的Data Execution Prevention有关,可以防止堆栈破坏攻击。
execstack
但是也许我只是太接近问题而无法找出问题所在。为什么我不能导入此python包?我正在使用从最新源代码(v.3.1)编译的Python v3.4和OpenCV 。
我按照以下步骤解决了这个问题: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
conda install -c menpo opencv3=3.1.0
>>>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'
sudo apt-get install gtk2.0-0
>>> cv2.__version__ '3.1.0'
请记住,如果遵循在线安装说明,则将opencv库安装到/ usr / local / lib。因此,该命令将是:
sudo execstack -c /usr/local/lib/libopencv_*