记录一次解决问题的过程

前言

最近想做一个 cpp 有关的项目练一下手,因为之前基本都是在学习关于 cpp 的语法特性啥的,并没有做过实际的应用项目,那就找个项目玩玩吧。

通过查找资料,我选择了一个名为oat++cpp web应用框架,因为之前学过一些 web 相关的技术知识,理论架构基础还是有的,想必应该还是很好上手的吧。

但是呢,显然我并没有在 cpp 构建web项目这方面的经验,不免走了许多弯路,期间也遇到一些问题。不过所幸的是,最后问题都解决了。

遇到了什么问题呢?我相信,这一类问题凡是第一步涉足一个新的领域都会碰到,那就是环境配置的问题。

是的,我花了三天时间,配置好了环境,成功编译并运行了第一个 Demo 程序。三天的时间还是比较漫长的,所幸最后没有放弃。

关于 cmake 的问题

github 中下载了 oatpp 的源代码,通过文档我得知了第一步就是重新编译这个源代码文件。很简单。

$ git clone https://github.com/oatpp/oatpp.git
$ cd oatpp\
$ MD build
$ cd build\

$ cmake ..
$ cmake --build . --target INSTALL

我使用了 visual studio code 打开了这个项目,我一直以为在 vs code 中写代码是一件很舒服的事,虽然它只是一个类似于记事本的功能,但是通过安装相应的插件和在命令行中执行相应的命令就可以达到和IDE一样的功能。

但是呢,我的能力现在不允许我装这个B,因为如果在命令行里面 cmake 的话,需要加一些参数,我没有学过 cmake。但是呢,我还是尝试了一下,通过查找相关的资料,我依旧成功地在命令行里进行构建了。不,并没有完全成功,而是成功一半吧。因为遇到了第一个问题。

由于 oatpp 中使用了 std::mutex 这个多线程库,但是我的编译器似乎在编译这个库的时候遇到了一个关于 c++14 标准的问题,大概就是,源代码中有一个操作是在 c++14 中定义的,但是我的编译器并不支持 c++14

没办法,那就换编译器呗,于是我从 Mingw 换成了 Msys2,期间配置各种环境变量也是颇为曲折

接下来就是在 cmake 的时候指定编译器就好了,但是呢,我尝试完所有方法,即在执行命令行操作的时候设置各种各样的编译参数,均不能编译成功。整吐了。这个问题我弄了一个下午加一个晚上。

关于32位编译和64位编译的问题

第二天我依旧不依不饶地尝试无果之后,果断认清了自己的认知水平。

直接上 visual studio 2019,vs第一次使用还是大学刚刚学 cpp 的时候,印象最深刻的就是,笨重!

因为那时候刚刚学 cpp,写的程序都是 HelloWorld 那种级别的,顶多就是快排算法这样的,根本用不上 vs 这种专门做工程项目的软件,于是那时候我并没有继续使用它,而是选择古老的 vc6.0。现在做项目了,用 vs,香!那是真的香啊!

果然,我用 vs 打开这个 oatpp 这个项目,它自动帮我配置好了 cmake 参数,直接make 好了,然后 install,舒服的一批,根本没有任何编译器的问题。我的妈呀。昨天弄了半天的问题也算解决了,之后还得好好补一补 Makefile 相关的知识才行。

oatpp 这个项目安装好了,开始写跑自己的项目吧。(在此之前我还特意去 vs 官网中学习了一下怎么使用 vs构建一个项目。哈哈哈哈。)

然后我去oatpp官网的学习文档中,copy了第一份demo代码。开始编译运行,一开始看着编译器的输出还是很顺利的,但是最后还是失败了。

具体遇到了什么问题呢?这不是重点(不过一会应该也知道)。重点是,这个问题指向的是 oatpp 这个库的源代码的问题,我的妈呀,不会要我改这个库的源代码叭,我可没有那个本事啊。

终于在网上查找了各种解决办法后,确定了问题产生的愿意,但是解决的办法都是改源代码的,我又改不动,没办法,我只能去 oatpp 这个库的 GitHub 上提issues

关于引用lib库的问题

又过了一天,心情已是极度郁闷了。起床打开电脑,看 GitHub,果然有项目的维护者回复了我的问题。给出了该问题的解决的方法。让我试试在64位的环境中编译试试,果然,这个问题解决了。。然后我关闭了 issues

但是后来发现这个回复我的小哥又把 issues 打开了,他认为这确实是该项目在 win32 环境下编译的一个问题,需要解决。我感觉我也算给这个库找到了一个比较关键的问题,而且也是我第一次提 issues,还挺成功的,心情大好。

不过好没两下心就凉了,因为这个 demo 还是不能运行起来。然后还是编译的问题,这次问题指向的是 lib 库引用的问题。这很显然是vs配置的问题了,噢对了,刚刚使用 vs 的时候,还配置了好一会才把 include 库添加进去。

接着我就 lib 库引用这个问题继续在网上找资料。但是,这次很不幸,我找到的所有方法都是如出一辙的,但是我照着他们给的方法一一试了一下都不能解决。

为了解决这个问题,我又耗费了一下午,心情又开始郁闷起来了。

终于在睡前去 StackOverflow 社区发帖子,描述了一下我遇到的问题并请求帮助。希望有大佬回答叭。

最后

时间来到了今天,我一上午都有课,上到十二点,吃个饭回宿舍快一点钟了。我急忙打开电脑,登陆 StackOverflow 社区,果然有人回复了,而且有个大佬提交了一个 Answer,我急忙试一试,卧槽!终于!编译成功了!!哈哈哈哈。心情大好!太开心了。而且这也是我第一次在 StackOverflow 这个社区提问。

编译成功.png

虽然只是一个很微不足道的小 demo,但是期间遇到的问题一度让我陷入自闭,几乎都想放弃了,但是所幸最后还是坚持下来了,把所有问题都通过自己的方式去找到解决办法了。期间还是有收获的,学到了很多,也认清了自己有很多不足之处。未来的路还很长,希望未来的我也可以坚持不懈,不要轻言放弃!