【问题标题】:OpenCV Python Linker ErrorOpenCV Python链接器错误
【发布时间】:2013-12-16 22:50:44
【问题描述】:

我一直在尝试在 heroku 上安装 opencv,但无济于事。我尝试使用 heroku-anvil 进行安装,现在正尝试通过 bash shell 安装 opencv。首先我安装了 cmake,但是当我尝试make opencv 时,我不可避免地会收到以下错误:

Linking CXX shared library ../../lib/cv2.so
/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libpython2.7.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/cv2.so] Error 1
make[1]: *** [modules/python/CMakeFiles/opencv_python.dir/all] Error 2
make: *** [all] Error 2

以下是我正在使用的确切命令:

# connect to bash shell

heroku run bash
cd /tmp

# Downloading and Installing cmake:

curl -s http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.Z > cmake.tar.gz
tar zxf cmake.tar.gz
cd cmake-2.8.12.1/
./bootstrap
make
make install

# Download and Install OpenCV

curl -s https://s3.amazonaws.com/nerdglasses/opencv/OpenCV-2.4.2.tar.bz2 > opencv.tar.gz
tar xf opencv.tar.gz
cd OpenCV-2.4.2/
../cmake-2.8.12.1/bin/cmake -DBUILD_SHARED_LIBS=NO -DCMAKE_SHARED_LINKER_FLAGS="-fPIC" -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DWITH_OPENEXR=OFF -DCMAKE_FIND_ROOT_PATH=/app/.heroku -DCMAKE_INSTALL_PREFIX=/app/.heroku .
make # ERROR HERE

有人知道如何解决这个问题吗?或者是否有更好的方法可以在 heroku 上为 python 网络应用程序安装 opencv?

【问题讨论】:

  • 看起来您的 CMake 命令中有错字。您似乎在DCMAKE_SHARED_LINKER_FLAGS="-fPIC" 参数的前面缺少-
  • 那我应该试试DCMAKE_SHARED_LINKER_FLAGS="--fPIC"吗?
  • 不-抱歉-我的意思是-DCMAKE_SHARED_LINKER_FLAGS="-fPIC"
  • 谢谢!我会试一试。
  • 不幸的是,这不起作用,我得到了同样的错误:/

标签: python bash opencv heroku cmake


【解决方案1】:

您需要使用共享和静态方式重新安装 python。

首先,再次下载 Python 源文件。

然后..

./configure --enable-shared --enable-static
make
make install

这样你就可以解决这个问题了。

这是您可能想知道的链接。

Installing OpenCV with python module on CentOS goes wrong

【讨论】:

    【解决方案2】:

    我在 Linux Mint 17.3 上安装 Caffe 和 OpenCV python 链接时遇到了同样的问题

    我不想使用 --enable-shared 选项重新安装 python,因为有很多软件包依赖于本机 python 安装。

    进一步挖掘发现,我的系统中安装了两个版本的python,一个在路径/usr/local/lib/python2.7[使用python从官网下载构建],另一个在路径/usr/lib/python2.7 [用 sudo apt-get install/ 包管理器安装]

    官网安装不是Position Independent Code,因为在配置python时没有提供enable shared。 [PIC,需要使用编译器标志]。

    即使在使用 -fPIC 之后也没有运气,并且由于 python at: /usr/local/lib/python2.7 对我没有用,因此决定使用以下命令将其删除

    sudo rm -rf /usr/local/lib/python2.7

    瞧!现在可以了。这允许 python 是位置无关的代码,因为它是基于包安装的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 2015-04-04
      • 1970-01-01
      • 2017-06-20
      • 2018-04-16
      • 2017-02-28
      • 2019-12-17
      • 1970-01-01
      相关资源
      最近更新 更多