Ubuntu下vscode跑opencv程序环境搭建。
目录
1 ubuntu查看opencv版本
2 下载opencv包
3 依赖配置
4 进入安装包内执行
5 配置环境变量
6 VScode配置-下载c++扩展
7 编译运行helloworld
8 在vscode中配置opencv环境
9 运行结果
1 ubuntu查看opencv版本
pkg-config --modversion opencv
2 下载opencv包
官网下载地址:https://opencv.org/releases/
3 依赖配置
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libvtk7-dev libjpeg-dev libtiff5-dev libopenexr-dev libtbb-dev
4 进入安装包内执行
mkdir build
cd build
cmake
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.5.1 ..
make -j4
sudo make install
执行结果:
5 配置环境变量
gedit ~/.bashrc
加入:
#opencv4.8.1
export PKG_CONFIG_PATH=/usr/local/opencv4.8.1/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv4.8.1/lib
后执行
source ~/.bashrc
6 VScode配置-下载c++扩展
7 编译运行helloworld
在vscode中创建c++文件,helloworld,在编译运行后将自动生成json文件,要运行opencv,需要修改这几个json文件。他们的作用是类似于形成
g++ -std=c++11 main.cpp -o main `pkg-config --cflags --libs opencv`
的编译命令。
8 在vscode中配置opencv环境
需要引入opencv库到编译环境中,修改位置:
c_cpp_properties.json中:
加入安装opencv库的位置。
task.json中:
加入库的链接。上面这行等同于分别链接下面这些库,因为有.pc文件。
gemini对pc文件的介绍:
`pc` 文件(pkg-config 文件)在引入三方库时扮演着至关重要的角色,它提供了有关库的信息,以便编译器和链接器可以找到并正确使用它。
`.pc` 文件通常包含以下信息:
- 库的名称和版本
- 库的描述
- 库的头文件和库文件的位置
- 库的依赖关系(其他必需的库)
- 库的编译和链接标志
当您使用 `pkg-config` 命令时,它会读取 `.pc` 文件并提取这些信息,然后将其传递给编译器和链接器。这简化了库的编译和链接过程,因为您不必手动指定所有这些信息。
例如,如果您要使用 OpenCV 库,您可以使用以下命令:
g++ -std=c++11 main.cpp `pkg-config --cflags --libs opencv`
`pkg-config` 命令将读取 OpenCV 的 `.pc` 文件并提取编译和链接 OpenCV 所需的所有信息。然后,它会将这些信息传递给 `g++` 编译器,以便它可以正确编译和链接您的代码。
**注意:**
- `.pc` 文件通常安装在 `/usr/lib/pkgconfig` 目录中。
- 您可以使用 `pkg-config --list-all` 命令查看系统上安装的所有 `.pc` 文件。
- 如果您找不到特定库的 `.pc` 文件,您可能需要手动指定编译和链接标志。
这里可能遇到问题,看起来正常的代码编译报错,是因为vscode没配置c++11。
OpenCV 4.8.1 **不支持** C++98 标准
OpenCV 4.8.1 要求使用 C++11 或更高版本。这是因为 OpenCV 4.8.1 使用了 C++11 中引入的许多特性,例如:
- 智能指针(`std::unique_ptr` 和 `std::shared_ptr`)
- 范围 for 循环
- lambda 表达式
如果您需要在 C++98 上使用 OpenCV,则需要使用较旧的版本,例如 OpenCV 3.4.x。
**注意:**
即使您能够在 C++98 上编译 OpenCV 4.8.1,也可能会遇到运行时错误,因为 OpenCV 4.8.1 依赖于 C++11 的某些特性。
两个方案,用老版本和配置vscode使用c++11编译。