无root权限在CentOS下安装OpenCV

本文详细介绍了在没有root权限的情况下,如何通过CMake配置和编译OpenCV库,包括创建编译环境、调整编译选项以适应特定需求,以及设置环境变量使g++能够调用OpenCV。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然说没有root权限,但是管理员还是配好了cmake的。
首先是下载官网OpenCV的zip包,下载地址,下载速度较慢。

下载好了之后进入opencv3.4.2文件夹

cd  opencv-3.4.2

然后我们建立一个build文件夹,用来编译用。

mkdir build && cd build

顺便复习一下编译,一般写程序大体步骤为:
1.用编辑器编写源代码,如.c文件
2.用编译器编译代码生成目标文件,如.o
3.用链接器连接目标代码生成可执行文件,如.exe
但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。
步骤为
原文件 -> CMakeLists.txt ->cmake ->makefile ->make -生成目标文件
所以呢,第一步要做的就是编写CMakeLists.txt,OpenCV已经做好了编写,我们只需要设置OFF和ON就可以了。很多人编译出错,是因为按照默认的CMakeLists.txt来生成makefile,其实完全没必要,像我的环境是服务器,不需要视频库,更不需要windows相关的库,事实上,我把cuda也关了。
节选部分如下

OCV_OPTION(WITH_HALIDE         "Include Halide support"                      OFF)
OCV_OPTION(WITH_INF_ENGINE     "Include Intel Inference Engine support"      OFF)
OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON)
OCV_OPTION(WITH_WEBP           "Include WebP support"                        OFF   IF (NOT WINRT) )
OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             OFF   IF (NOT IOS AND NOT WINRT) )
OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT WINRT) )
OCV_OPTION(WITH_OPENVX         "Include OpenVX support"                      OFF)

由于我没有root权限,我在我自己的目录下建立了一下usr/local/文件夹,用于存放编译好的目标文件库。

mkdir /home/zhaoyang/usr && mkdir /home/zhaoyang/usr/local

接下来在build文件夹下,用cmake生成makefile
如果显示没有cmake命令,最简单的选择是进入conda环境,用

conda install cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/zhaoyang/usr/local/ ..

之后还是在build文件夹下,用make编译

make -j64
make install

这样一来会发现在home/name/usr/local/ 文件夹下会有一些库,其中lib64下有我们需要的opencv目标文件。
接下来还有设置一下ld环境变量,使得g++能够调用opencv

vim ~/.bash_profile
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/name/usr/local/lib64/pkgconfig
export PKG_CONFIG_PATH 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/name/usr/local/lib64/
source ~/.bash_profile

准备一个测试opencv的脚本

//OpenCV版本3.0.0  
// 
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
// // 使用标准的cv库
using namespace cv;
int main( )
{
//   // 读取源图像并转化为灰度图像
    Mat srcImage = cv::imread("1000.jpg");
    imwrite("./1.jpg", srcImage);
    printf("aaa");
    return 0;
}

生成可执行文件的时候,注意下面不是引号,而是飘号 `

g++ test.cpp -o test `pkg-config --cflags --libs opencv`

执行的时候

./test 1000.jpg
<think>我们正在处理一个在较老版本的Linux系统上安装特定版本OpenCV的问题。用户遇到了平台不支持的错误,因为许多旧的Linux发行版可能不支持较新的`manylinux2014`标签。我们需要找到一个方法来安装这个wheel文件。参考引用内容,特别是引用[2]和[3],我们知道:-需要确保wheel文件与Python版本和系统架构匹配。-如果遇到平台不支持,可以尝试查看当前平台支持的标签,或者使用更兼容的wheel。用户提供的wheel文件名是:`opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl`问题在于`manylinux2014`标签。较老的Linux系统可能只支持`manylinux1`或`manylinux2010`。因此,我们需要让pip能够识别这个wheel在旧系统上也可以安装。解决方案通常有两种:1.寻找一个使用更旧`manylinux`标签的wheel文件(如`manylinux2010`或`manylinux1`)。2.强制安装,告诉pip忽略平台兼容性检查(不推荐,因为可能有兼容性问题,但有时可行)。如果用户必须使用这个特定版本,我们可以尝试强制安装,但需要注意风险。步骤:1.首先,确认系统环境:Python版本(3.6)和系统架构(x86_64)与wheel匹配。2.尝试强制安装:使用`--platform`选项或修改wheel文件名以匹配系统支持的平台标签。但是,pip的`--platform`选项通常用于下载时指定平台,而不是安装本地wheel。另一种强制安装的方法是使用`--ignore-requires-python`和`--no-deps`,但更直接的是使用`--no-binary`或使用`--force-reinstall`配合平台标志?实际上,pip安装本地wheel时,我们可以使用`--no-index`和`--find-links`,但这里我们直接安装本地文件。最直接的方法是使用`--platform`选项,但经查,pip安装本地wheel时,`--platform`选项无效。所以我们可以尝试修改wheel文件名,将`manylinux2014`改为系统支持的标签(如`manylinux1`),但这可能会破坏文件的完整性。3.推荐的方法是使用`auditwheel`工具来修复wheel的兼容性标签,但需要在一个支持该标签的系统上操作,然后复制到旧系统?或者直接在旧系统上使用`auditwheel`?但旧系统可能没有`auditwheel`,或者版本过低。4.另一个方法是:使用`pipinstall`时加上`--only-binary:all:`和`--platform`指定平台,但这是用于下载的。对于本地文件,我们可以尝试:```pipinstall--no-index--platformmanylinux2010_x86_64--only-binary:all:opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl```但是,这个命令会要求pip去下载匹配`manylinux2010_x86_64`的包,而不是使用本地文件。所以不可行。5.实际上,有一个更简单的方法:使用`pipinstall`的`--force-reinstall`选项并不能解决平台问题。我们可以尝试使用`--ignore-requires-python`和`--no-deps`,但平台检查是独立的。6.最终,我们可以尝试使用`pipinstall`的`--target`选项?但也不相关。经过研究,最可靠的解决方案是使用`auditwheel`重新打标签。步骤如下:-首先,安装`auditwheel`:`pipinstallauditwheel`-然后,使用`auditwheel`检查wheel文件:`auditwheelshowopencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl`-它会显示当前wheel的标签以及它兼容哪些平台。然后我们可以使用`auditwheelrepair`来修改标签(如果兼容的话):```auditwheelrepair--platmanylinux1_x86_64opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl```注意:`manylinux2014`是向后兼容`manylinux2010`和`manylinux1`的,所以重新打标签为`manylinux1`应该是可行的,前提是它没有使用比`manylinux1`标准更新的库。-然后,在旧系统上安装修复后的wheel文件。但是,如果旧系统太老,可能修复后的wheel仍然需要一些依赖库,这些库在旧系统上可能不存在。所以这种方法不一定100%有效。如果用户无法使用`auditwheel`(比如没有权限安装或系统太老无法安装),那么我们可以尝试直接解压wheel文件,然后修改其中的标签。步骤:1.将.whl文件重命名为.zip并解压。2.进入解压后的文件夹,找到`<package_name>.dist-info/WHEEL`文件。3.打开WHEEL文件,将`manylinux2014`改为`manylinux1`(或其他系统支持的标签)。4.重新打包:`zip-r../new_wheel.whl.`5.安装修改后的wheel。但这种方法可能会破坏哈希校验,所以安装时可能需要使用`--no-verify`选项(不推荐,因为可能损坏文件)。考虑到用户的环境是较老的Linux系统,我们建议先尝试使用`auditwheel`重新打标签。如果不行,再考虑手动修改。另外,也可以尝试从源码编译OpenCV,但这通常更复杂,用户可能希望避免。总结步骤:**方法一:使用auditwheel(推荐)**1.在一个较新的Linux系统(或容器)中,安装auditwheel:`pipinstallauditwheel`2.使用`auditwheelrepair`修复wheel文件,指定目标平台(例如`manylinux1_x86_64`):```bashauditwheelrepair--platmanylinux1_x86_64opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl```修复后的wheel文件会生成在`wheelhouse`目录下,文件名包含新的平台标签。3.将修复后的wheel文件复制到旧系统,然后使用pip安装。**方法二:手动修改(不推荐,但如果没有其他选择)**1.将wheel文件重命名为zip文件并解压:```bashmvopencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whlopencv_contrib_python.zipunzipopencv_contrib_python.zip-dopencv_wheel```2.修改WHEEL文件:```bashcdopencv_wheel/opencv_contrib_python-4.5.4.58.dist-infosed-i's/manylinux2014/manylinux1/'WHEEL```3.重新打包:```bashcd..zip-r../opencv_contrib_python_fixed.whl*```4.在旧系统上安装修改后的wheel文件:```bashpipinstallopencv_contrib_python_fixed.whl--no-verify#跳过验证,可能有风险```**方法三:从源码编译(最灵活,但最复杂)**如果以上方法都不行,可以考虑从源码编译OpenCV。步骤大致如下:1.安装依赖库(根据OpenCV文档)。2.下载OpenCVopencv_contrib的源码(对应版本4.5.4)。3.使用CMake配置,指定opencv_contrib模块和Python3的路径。4.编译并安装。由于用户指定了版本,所以需要下载对应版本的源码。考虑到用户可能不想编译(因为耗时长且复杂),我们优先推荐方法一。现在,我们根据用户的问题,给出一个清晰的回答。</think>### 在较老版本Linux系统安装特定版本OpenCV的解决方案 根据引用内容[^2][^3][^4],您遇到的平台不支持错误(`not a supported wheel on this platform`)通常由Python版本、系统架构或`manylinux`标签不匹配引起。以下是针对`opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux2014_x86_64.whl`的安装步骤: #### 解决方案步骤 1. **确认系统兼容性** - 检查Python版本:终端执行 `python3 --version` *必须为Python 3.6(cp36标签)* - 检查系统架构:终端执行 `uname -m` *必须为x86_64(与wheel文件名匹配)* 2. **处理manylinux2014兼容问题**(关键步骤) 较老Linux系统(如CentOS 7)可能不支持`manylinux2014`标签。解决方法: ```bash # 临时扩展平台兼容性标签 export PLAT=manylinux2014_x86_64 # 原始标签 export AUDITWHEEL_PLAT=manylinux_2_17_x86_64 # 或 manylinux_2_5_x86_64 # 使用auditwheel修复wheel文件 pip install auditwheel auditwheel repair opencv_contrib_python-4.5.4.58-cp36-cp36m-$PLAT.whl ``` 修复后的文件将生成在`wheelhouse/`目录,名称变为`manylinux_2_5_x86_64`等兼容标签[^2][^3]。 3. **强制安装修复后的wheel** ```bash pip install --no-deps --force-reinstall wheelhouse/opencv_contrib_python-4.5.4.58-cp36-cp36m-manylinux_2_5_x86_64.whl ``` 4. **备选方案:源码编译**(当wheel完全不可用时) ```bash # 安装编译依赖 sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config # 下载指定版本源码 wget https://github.com/opencv/opencv_contrib/archive/4.5.4.tar.gz tar -xvf 4.5.4.tar.gz mkdir build && cd build # 配置编译选项 cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.4/modules \ -DBUILD_opencv_python3=ON \ -DPYTHON_EXECUTABLE=$(which python3.6) .. make -j$(nproc) sudo make install ``` #### 常见错误处理 - **ImportError: lib*.so缺失**: 执行`ldd /usr/local/lib/python3.6/site-packages/cv2.so`检查缺失库,通过`yum`或`apt`安装对应依赖[^4]。 - **版本冲突**: 使用虚拟环境隔离安装: ```bash python3.6 -m venv opencv_env source opencv_env/bin/activate pip install numpy # 必需依赖 # 再执行上述安装步骤 ``` > **关键提示**:较老系统建议优先尝试`auditwheel`修复wheel(步骤2),其次考虑源码编译[^3][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值