环境概览
WSL Linux + OpenCV + OpenCV Contrib + CUDA
cmake + make 本地编译
Conda Python 3.12.9
首次cmake问题
使用bash脚本配置cmake编译,第一次配置的时候忘记指定python了,如下
set -e
export CONDA_HOME=/home/mgam/miniforge3
export ENV_HOME=${CONDA_HOME}/envs/latest
export CPLUS_INCLUDE_PATH=${ENV_HOME}/lib/python3.12
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_opencv_world=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_OPENMP=ON \
-D WITH_NVCUVID=ON \
-D WITH_NVCUVENC=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_FAST_MATH=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_ARCH_BIN=8.9 \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
..
cmake后python3的部分显示如下:
-- Python 3:
-- Interpreter: /home/mgam/miniforge3/envs/latest/bin/python3.12 (ver 3.12.9)
-- Libraries: NO
-- Limited API: NO
-- numpy: /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/numpy/_core/include (ver 2.2.3)
-- install path: -
--
-- Python (for build): /home/mgam/miniforge3/envs/latest/bin/python3.12
install path、 Libraries、API都没有正常显示,此时安装后在python环境中是找不到cv2的。
完善cmake指令后问题不修复
set -e
export CONDA_HOME=/home/mgam/miniforge3
export ENV_HOME=${CONDA_HOME}/envs/latest
export CPLUS_INCLUDE_PATH=${ENV_HOME}/lib/python3.12
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_opencv_world=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_OPENMP=ON \
-D WITH_NVCUVID=ON \
-D WITH_NVCUVENC=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_FAST_MATH=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_ARCH_BIN=8.9 \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_LIBRARY=$ENV_HOME/lib/libpython3.12.so \
-D PYTHON3_INCLUDE_DIR=$ENV_HOME/include/python3.12 \
-D PYTHON3_EXECUTABLE=$ENV_HOME/bin/python3.12 \
-D PYTHON3_PACKAGES_PATH=$ENV_HOME/lib/python3.12/site-packages \
..
查看到cmake python3的部分显示依旧没有改变,编译后安装后在python中还是找不到。
问题解决
删除build路径下所有文件再执行cmake。
没想到居然是cmake缓冲的问题,可能是cmake在多次同目录下执行的时候,会读取之前的生成文件。
即使在后续的cmake指令中修改了一些指令,也会因为生成文件缓冲读取而不被cmake真正利用起来。
正确的cmake输出的python部分应该显示如下:
-- Python 3:
-- Interpreter: /home/mgam/miniforge3/envs/latest/bin/python3.12 (ver 3.12.9)
-- Libraries: /home/mgam/miniforge3/envs/latest/lib/libpython3.12.so (ver 3.12.9)
-- Limited API: NO
-- numpy: /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/numpy/_core/include (ver 2.2.3)
-- install path: /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/cv2/python-3.12
--
-- Python (for build): /home/mgam/miniforge3/envs/latest/bin/python3.12

1853

被折叠的 条评论
为什么被折叠?



