C++ 编译环境配置

1 前言

先说结果:
调通了VS2019的C++编译版本。
CMake版本,后续补上。

2 过程

2.1 方案一 Ubuntu

  • 编译环境CMake
  • 工具 Virtual Box + Ubuntu 18.04 + VSCode
  • 结果:失败
  • 原因,感觉是库的地址没有配对,暂时不去折腾了

作业三 渲染管线和着色器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wDHiBaXq-1636620049155)(en-resource://database/3625:1)]
作业五 光线追踪
直接99%卡住不动

2.2 方案二 Win 10 + CMake

windows 下面的CMake编译
问题在于opencv都编译通不过。
原因分析:

  • 网速慢,依赖的库下载不下来,后续可以考虑下载网上直接编译好的代码
  • 库的环境位置不对
    在这里插入图片描述

2.3 方案三 Win 10 + VS2019

以GAMES101为例。
外部库依赖为Eigen和OpenCV两个库,把这两个库配置好,其他问题可以见本篇的问题集合以及网络搜素可以查找到答案。
VS2019还有一个比较好的优势是调试相对方便。

2.3.1 Eigen库配置

库简介
Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

操作步骤:下载解压到指定目录。
(1)VS2019配置,引入到工程文件的VC++ 目录 -> 包含目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9QpNVKC-1636620049161)(en-resource://database/3631:1)]

2.3.2 OpenCV配置

库简介
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV文件组成
VS中使用OpenCV调用的是
①bin文件:opencv_ffmpeg341.dll,视频编解码软件
②include文件:包含.h等头文件 x64文件=bin文件(opencv_world341d.dll)+ lib文件(opencv_world341.lib),其中vc14对应VS2015,vc15对应VS2017

操作步骤:下载解压到指定目录
(1)系统环境变量中引入。D:\ProgramFiles\opencv\build\x64\vc15\bin。
vc10表示VS是2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015 ,vc15对应VS2017

(1)配置Path系统环境变量:此电脑–>右键“属性”–>高级系统设置–>环境变量–>系统变量中的path,在变量值里面添加相应的路径; D:\ProgramFiles\opencv\build\x64\vc15\bin(配置动态链接库,注意自己的路径)
(2)VS2017中配置OpenCV
菜单栏中点击视图->属性管理器,即打开属性管理器工作区;
工程中右击–>属性

  • 包含目录配置:VC++目录—>包含目录
    D:\ProgramFiles\opencv\build\include
    D:\ProgramFiles\opencv\build\include\opencv2
  • 库目录配置:VC++目录—>库目录D:\ProgramFiles\opencv\build\x64\vc15\lib (参考文章是用的bin,但我报错了)

x64表示电脑是64位,32位选择x86
vc10表示VS是2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015 ,vc15对应VS2017

  • 链接器配置:链接器–>输入–>附加依赖项

debug:opencv_world454d.lib release:opencv_world454.lib
若执行时出现找不opencv_world454d.dll,就把自己opencv文件目录下的D:\ProgramFiles\opencv\build\x64\vc15\bin中的三个dll文件,拷贝到C:\window\System32C:\window\SysWOW64
在这里插入图片描述

3 问题集合

Q1 opencv是x64

解决方案平台x64,不能是x86,不然会报模块计算机类型“X64”与目标计算机类型“X86”冲突的问题。因为opencv是x64的,所以模块(包)都是x64的

Q2 error LNK2019: 无法解析的外部符号

参考文章
在这里插入图片描述

原因:链接器中填写的输入的外部依赖包,并没有找到,填入对应的lib库即可。(注意这里有opencv_world454d.lib和opencv_world454d.lib,两个版本,选择能通过编译的版本,不要都加上)。其实在配置的部分已经说明了,这里是记录编译报错,解决错误的方法。
输入

Q3 相对路径问题

c++要使用外部的图片等资源文件,这就涉及到路径问题

Visual Studio 中使用cv::imread读取图片时的一个易错点
1、例如在VS2019中使用cv::imread(path)读取path的图片时,
注意两点:(1)相对路径相对.vcxproj来写;(2)若在debug模式下,则包含的附加依赖项中 不带d的lib 都要去除!

Q4 设置VS2019 支持C++17标准

没有配置的话,当你使用C++17的最新接口和方法时,会报错
c++17

Q5 由于找不到opencv_world440d.dll,无法执行代码

将 opencv 安装路径 目录\opencv\build\x64\vc15\bin 中所有后缀是.dll 的应用程序扩展复制到 C:\Windows\System32 中
这个地方需要注意,必须把目录下的所有.dll文件拷贝过去。好多博客仅说拷贝缺失的.dll文件,或是拷贝opencv_world440d.dll和opencv_world440.dll两个文件

Q6 错误LNK1104无法打开文件“kernel32.lib”等

我是直接添加对应的目录解决问题的。
步骤:在vs2019界面内依次点击【项目】 【属性】 【VC++目录】 【库目录】【 编辑】 进去后加上这一行C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x86

安装库:

第一步:打开visual studio installer,找到你安装的哪个版本。
第二部:点击“修改”按钮,等待文件安装列表,选择“单个组件”。
第三步:滚动条拉到最下面,选择“Windows 10 SDK(10.014393.0)”,然后点击右下角的“修改”按钮,等待安装成功即可。

最后:安装完库文件后,如果还不能解决问题,可以尝试在vs2017界面内依次点击【项目】 【属性】 【VC++目录】 【库目录】【 编辑】 进去后加上这一行C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x86

Q7 “error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead” 解决方法

解决办法:
项目----》 XX属性 ----》C++ —>预处理器 —》在预处理器定义添加“_CRT_SECURE_NO_WARNINGS”

08 vs2019永久配置opencv开发环境

vs2019永久配置opencv开发环境
可以参考文章,本质其实就是将库拷贝到基础库中

Q9 无可用信息,未为 opencv_world454.dll 加载任何符号

我的问题出在图片输出这个地方cv::imwrite(filename, image);

if (command_line)
    {
        r.clear(rst::Buffers::Color | rst::Buffers::Depth);
        r.set_model(get_model_matrix(angle));
        r.set_view(get_view_matrix(eye_pos));
        r.set_projection(get_projection_matrix(45.0, 1, 0.1, 50));
        r.draw(TriangleList);
        cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
        image.convertTo(image, CV_8UC3, 1.0f);
        cv::cvtColor(image, image, cv::COLOR_RGB2BGR);
        cv::imwrite(filename, image);
        return 0;
    }

解决办法:命令行参数问题
int main(int argc, const char** argv)
方法中,argc指传入参数的个数,argv存储了所有的命令行参数。
在调试过程中,属性->调试->命令行参数。要注意的时默认第一个为exe的参数

例如下图:默认argv[0] 为exe,arcgv[1]为normal.png,arcgv[2]为normal

在这里插入图片描述

Q10 C/C++ 中 main 函数参数 argc,argv 说明以及 VS 调试配置

直接看这篇文章
两种方式:
方法1 命令行中运行
在这里插入图片描述

方法2 VS调试运行
在这里插入图片描述

4 参考文章

MFC+OpenCV使用问题及解决办法,可以参考
error LNK2019: 无法解析的外部符号”的几种可能原因
无法解析的外部符号 void __cdecl cv::imshow
Visual Studio 中使用cv::imread读取图片时的一个易错点
VS2019配置OpenCV运行时报错:找不到opencv_worldxxx.dll
错误LNK1104无法打开文件“kernel32.lib”等
OpenCV error LNK1104: cannot open file ‘opencv_core231.lib’
vs2019永久配置opencv开发环境

5 学习资料

https://blog.csdn.net/qq_40515692/article/details/81042303

6 编译结果

在这里插入图片描述

在这里插入图片描述

おすすめ

転載: blog.csdn.net/Tmraz/article/details/121271011