网络聊天项目(2)-VisualStudio配置boost与json


Note: 此项目原博客地址

https://llfc.club/category?catid=225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2eIZxNzngJYIRWlBEXDJyVdk9Lb

Boost库安装

打开Boost库官网https://www.boost.org/,下载boost库文件安装包

解压boost库文件后,点击booststrap.bat生成b2.exe执行文件

001_boost库文件

生成b2.exe后,点击他并输入以下命令

1
.\b2.exe install --toolset=msvc-14.3 --build-type=complete --prefix="D:\cppsoft\boost_1_81_0" link=static runtime-link=shared threading=multi debug release

先来解释一下各个参数的含义

  • install代表可以更改为stage,stage只生成库(lib和dll),install还会生成包含头文件的include目录。一般来说用stage足够了我们将生成的lib和下载的源码包的include头文件放到项目要用到的地方即可

  • toolset指定编译器,gcc是编译生成Linux用的库,msvc是用来编译生成Windows用的库,msvc后面的-14.3代表了我使用的Visual Studio是2022版本,这里的数字一定要与Visual Studio的版本相对应

  • 如果选择的是install命令,指定生成的库文件夹要用–prefix,如果使用的是stage命令,需要用到–stagedir来指定

  • link表示要生成静态库还是动态库,static表示生成lib库,shared表示生成dll库

  • runtime-link表示用于指定运行时链接方式为静态库还是动态库,指定为static就是MT模式,指定shared就是MD模式。MD和MT是微软Visual C++编辑器的选项,用于指定运行库时的链接方式,这两个选项有以下两个区别:

    1、MD:表示使用多线程DLL(Dynamic Link Library)版本运行时的库。这意味着你的应用程序将使用动态链接的运行时库(MSVCRT.dll),这样的设置可以减少最终可执行文件的大小,并允许运行程序与其他使用相同运行库版本的程序共享代码和数据

    2、MT:表示使用多线程静态库(Static Library)版本时运行的库。这意味着所有的运行函数都将被静态链接到应用程序里面,使得应用程序不在依赖于动态链接时的运行库。这样可以确保应用程序在没有额外依赖的情况下独立运行,但可能会导致最终可执行文件体积的增大

一句话简化上边的含义,就是我们生成的lib库,运行时采用MD加载模式

下面是编辑界面

002_Boost编辑页面

标注的就是运行命令后生成的目录和文件

003_编译后生成的文件

接下来我们配置Boost

配置Boost库

打开Visual Studio创建项目,右键点击项目选择属性,点开VC++目录,选择包含目录,添加路径D:\WorkSoft\Code\Three-part_libraries\Boost\boost_1_85_0

004_boost包含目录

然后选择库目录,添加路径D:\WorkSoft\Code\Three-part_libraries\Boost\boost_1_85_0\lib

005_boost库目录

配置包含目录和库目录的路径都是自己电脑上boost文件的目录

接下来写个代码测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include "boost/lexical_cast.hpp"
int main()
{
using namespace std;
cout << "Enter your weight: ";
float weight;
cin >> weight;
string gain = "A 10% increase raises ";
string wt = boost::lexical_cast<string> (weight);
gain = gain + wt + " to "; // string operator()
weight = 1.1 * weight;
gain = gain + boost::lexical_cast<string>(weight) + ".";
cout << gain << endl;
system("pause");
return 0;
}

运行成功,就会弹出以下界面

006_boost测试

配置jsoncpp

因为客户端与服务器之间的通讯一般都使用jsoncpp进行数据加密,所以我们也使用jsoncpp,首先从官网https://github.com/open-source-parsers/jsoncpp下载相应的压缩包,解压压缩包后生成以下文件

007_解压jsonc压缩包

点击makefiles文件

008_makefiles文件

找到jsoncpp.sln文件,用Visual Studio打开,之后会出现单项升级提示,点击确定

009_json升级

找到项目里的lib_json,选择用X64位的编译平台进行编译,将debug与release两个版本都编译一下

010_lib_json

右键lib_json选择属性,打开C/C++再选择代码生成,之后在右侧选择运行库,选择MDd版本

011_运行库

编译生成后,在makefiles文件下就会生成x64文件夹

012_x64

接下来我在D:\WorkSoft\Code\Three-part_libraries\Json这个目录下创建一个json文件夹,在其内部闯将include和lib两个文件夹

013_include与lib

将jsoncpp-src-0.5.0源码文件夹下include文件夹里的内容copy到libjson下的include文件夹内。

将jsoncpp-src-0.5.0源码文件夹下x64位debug文件夹和Release文件夹下生成的库copy到libjson下的lib文件夹内。

014_lib

接下来,我们需要在项目属性中配置jsoncpp,同配置boost一样,先配置包含目录,添加路径D:\WorkSoft\Code\Three-part_libraries\Json\json\include

015_jsoncpp包含目录

之后,再配置库目录,添加路径

016_jsoncpp库目录

另外我们还需要设置链接器->输入->附加依赖项里设置json_vc71_libmtd.lib

017_附加依赖项

之后,我们写个代码测试一下json库的安装情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <json/json.h>
#include <json/value.h>
#include <json/reader.h>
int main()
{
Json::Value root;
root["id"] = 1001;
root["data"] = "hello world";
std::string request = root.toStyledString();
std::cout << "request is " << request << std::endl;
Json::Value root2;
Json::Reader reader;
reader.parse(request, root2);
std::cout << "msg id is " << root2["id"] << " msg is " << root2["data"] << std::endl;
}

代码的输出如下:

018_json测试