【问题标题】:GCC doesn't compile with libraries installed to a virtual environmentGCC 不与安装到虚拟环境的库一起编译
【发布时间】:2018-04-14 04:00:56
【问题描述】:

我在使用 GCC 工具链进行编译时遇到问题。我正在使用 OpenCV 开发面部检测程序,该程序注定稍后在嵌入式 Linux 平台(如 Raspberry PI3)中工作,这就是我继续进行的方式:

首先,在运行 Ubuntu 的 PC 上:

在这台机器上,我安装了带有 NO 虚拟环境的 OpenCV 2.4。

我在 Python 2.7 中开发了该软件,使用 OpenCV 库和其他库,例如 NumPy 等。现在为了优化我的代码,我使用 Cython 将 .py 文件转换为 .c,然后编译生成的 .c 文件并将其链接到一个唯一的可执行文件中。可执行文件运行良好并通过了所有测试,我还获得了性能(快速响应)。

其次,在树莓派 3 上出现问题

在这里,我使用 Python 2.7 在名为 (cv) 的虚拟环境中安装了 OpenCV 3.1.0。

然后我尝试将代码源移植到 Raspberry PI,经过一些调整和一些小的修改后,我的 Python 文件 .py 工作正常,软件工作正常。现在的问题是,当我用相同的方法编译使用 Cython 生成的 .C 文件时,编译失败,我猜是因为 OpenCV 只安装在虚拟环境中,所以我给 GCC 一个链接到安装 OpenCV 并通过编译的 VirtualEnv 文件夹的路径。但是可执行文件仍然给我一个错误,说即使所有这些步骤都在激活(cv)虚拟环境的情况下完成,导入 cv2 也找不到 cv2 包。

现在我要提问: - 有什么方法可以概括虚拟环境中安装的内容,例如,在我的情况下,我需要 OpenCV 可以从 Raspberry 中的任何地方调用,而无需登录到虚拟环境? - 可执行文件是否知道它们是在虚拟环境中启动的?我的意思是如果他们需要一个只安装在虚拟环境中的包,我怎么能让他们知道呢?

注意我的方法基于这两篇文章:

【问题讨论】:

  • 将OpenCV目录添加到PATHLD_LIBRARY_PATH环境变量中。
  • @zindarod 我应该添加什么目录?我添加了 dist-packages 目录:/home/pi/.virtualenvs/cv/local/lib/python2.7/site-packages cv2.so 安装到两个变量但它仍然不起作用!

标签: python c opencv raspberry-pi cython


【解决方案1】:

要为所有进程激活 virtualenv,需要设置以下环境变量。

VIRTUAL_ENV=<absolute path of virtual env directory>
PATH=<virtual env dir>/bin:$PATH

您可以在启动时在通常的位置(/etc/profile 等)设置这些,以使所有进程默认使用虚拟环境。

【讨论】:

  • 我验证了变量已经包含了。问题是可执行文件没有检测到 cv2(说:ImportError: No module named cv2 即使我从虚拟环境中启动可执行文件!但是当我启动一个普通的 python 脚本时它可以正常工作!
  • 如果 cv2 在 vi​​rtualenv 中不起作用,那么您希望启用 virtualenv 会产生什么影响?修复virtualenv中的安装然后它会工作。
  • 我说当我在 virtualenv 中运行 Python 脚本时,CV2 工作得很好,当我运行可执行文件时出现问题,当我运行它时,即使我在 virtualenv 中运行它也会给我这个错误你明白我的意思了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 2013-05-19
相关资源
最近更新 更多