<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wbvalid的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wbvalid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wbvalid]]></copyright><item><title><![CDATA[vscode新版本remotessh服务端报`GLIBC_2.28‘ not found解决方案]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/138808679</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/138808679</guid><author>wbvalid</author><pubDate>Mon, 13 May 2024 17:02:41 +0800</pubDate><description><![CDATA[在本例的情况下，vscode-server端捆绑的node依赖的是GLIBC_2.28，那么我们只需要下载glibc 2.2.8版本即可，不需要下载太高的版本，因为更高版本依赖于高版本的make，as，ld等binutils，可能会无法顺利编译。通过vscode的remotessh插件连接老版本服务器（如RHEL7，Centos7）时，插件会报错，无法连接。首先，我们要进入vscode-server端的路径，通常情况下在家目录的这个位置。，千万不要覆盖系统的glibc，千万不要安装到系统PATH路径中。]]></description><category></category></item><item><title><![CDATA[CMake 自定义工具链在rh7.9上使用高版本gcc体验c++17特性]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/131779564</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/131779564</guid><author>wbvalid</author><pubDate>Tue, 18 Jul 2023 09:33:41 +0800</pubDate><description><![CDATA[本文建立在在上一篇文章的基础上 《编译安装GCC11.2 包教包会》展示了如何让CMake使用自定义工具链，在低版本gcc机器上使用高版本gcc，例如在RHEL 7.9系统（默认gcc 4.8.5）上使用gcc 11.2的方法。]]></description><category></category></item><item><title><![CDATA[llvm和clang环境配置（续篇）]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/128736236</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/128736236</guid><author>wbvalid</author><pubDate>Thu, 19 Jan 2023 17:49:37 +0800</pubDate><description><![CDATA[关于llvm和clang开发环境的配置之前已经发过一篇，当时是因为llvm官网给的文档省略了很多重要信息，需要额外补充一些信息才能完成环境配置。时隔许久，重新打开llvm官网，发现他们的文档已经更新了，写的非常详细，专门列举了一节用来解释如何在远古linux发行版上编译安装llvm+clang的方法。内容大体上和我上篇差不多，但是有些细节需要注意，是我上篇内容中遗漏的。]]></description><category></category></item><item><title><![CDATA[clang和llvm环境搭建及使用详解]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/123312921</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/123312921</guid><author>wbvalid</author><pubDate>Sun, 06 Mar 2022 17:55:53 +0800</pubDate><description><![CDATA[最直接的方案是从LLVM-project的Github Release页面上下载编译好的二进制包，我的环境是ubuntu-20.04 WSL2，因此可以直接开箱即用。如果是远古系统，例如CentOS7之类的，需要先编译一套GCC-11.2工具链，然后再通过GCC工具链编译LLVM+Clang；]]></description><category></category></item><item><title><![CDATA[Ubuntu20.04 LTS 安装GCC11.2教程，包教包会！]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/119945557</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/119945557</guid><author>wbvalid</author><pubDate>Fri, 27 Aug 2021 09:50:25 +0800</pubDate><description><![CDATA[GCC 11.2 安装
前置条件
首先把Ubuntu提供的各种构建工具都给他装上
sudo apt install build-essential manpages-dev software-properties-common gcc g++ make bison binutils gcc-multilib flex

下载源码包
可以到gnu镜像列表找到离你最近的镜像站，下载源码包。注意一定要下载编译所需的依赖包。如下：
（我这边最快的是jp的镜像站，每个人情况不同，根据实际情况替换其中的ftp.tsuk]]></description><category></category></item><item><title><![CDATA[nlohmann-json库使用简介]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/119781303</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/119781303</guid><author>wbvalid</author><pubDate>Wed, 18 Aug 2021 20:48:37 +0800</pubDate><description><![CDATA[nlohmann-json库使用简介
GitHub地址 nlohmann/json
简介
JSON库千千万，为何nlohmann/json库那么热门呢？原因在于它的设计理念非常人性化：

提供符合直觉的语法：可以像STL容器一样来使用，提供了丰富而且符合直觉的接口；
简易的导入方式：仅头文件（header-only）形式的JSON库，方便整合到项目中；
严谨的测试：简而言之就是不用担心库的解析出问题，准确率贼高。

缺点也是有的：

不追求内存的效率；
不追求性能；

因此，在不需要高性能的场景下，使用这个]]></description><category></category></item><item><title><![CDATA[C++模板元编程基础之“std::enable_if”的使用]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/119352979</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/119352979</guid><author>wbvalid</author><pubDate>Tue, 03 Aug 2021 16:30:02 +0800</pubDate><description><![CDATA[std::enable_if典型用法
代码示例


通过返回值使用：
template&lt;class T,class... Args&gt;
typename std::enable_if&lt;std::is_trivially_constructible&lt;T,Args&amp;&amp;...&gt;::value&gt;::type 
    construct(T* t,Args&amp;&amp;... args) 
{
    std::cout &lt;&lt; "construct]]></description><category></category></item><item><title><![CDATA[Muduo网络库核心梳理]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/119057885</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/119057885</guid><author>wbvalid</author><pubDate>Sat, 24 Jul 2021 15:11:14 +0800</pubDate><description><![CDATA[Muduo网络库
Muduo网络库本身并不复杂，是一个新手入门C++面向对象网络编程的经典实战项目。但是，新手在刚刚上手读代码的时候，非常容易陷入代码的汪洋大海，迷失方向。本文旨在简要梳理Muduo网络库的核心内容，帮助初学者快速上手源码阅读。
第一部分：概述
通过学习Muduo网络库的源码，初学者可以掌握的主要知识点有：

EventLoop事件循环的实现方式；
Reactor反应堆模式在TCP网络通信编程中的基本实现方式；（可以从《UNIX网络编程》中参考各种通信模型）
Socket API，Epoll]]></description><category></category></item><item><title><![CDATA[C++设计模式由浅入深（四）——swap抽丝剥茧]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/117852626</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/117852626</guid><author>wbvalid</author><pubDate>Sat, 12 Jun 2021 17:57:19 +0800</pubDate><description><![CDATA[四、深入浅出剖析swap
1 STL与swap
swap操作被广泛应用与C++标准库中。所有的标准模板库（STL）容器都提供了swap函数，并且同时支持非成员版本的函数模板std::swap。swap在STL的算法中也有广泛应用。标准库也是常常被用来实现与之类似自定义功能的模板库。因此，我们将会开始学习swap操作并且仔细研究标准库提供的函数细节。
1.1 swap与STL容器
从概念上讲，swap所做的行为就如同下面所示的操作：
template &lt;typename T&gt; void swap(]]></description><category></category></item><item><title><![CDATA[C++设计模式由浅入深（三）—— 内存所有权]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/117852570</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/117852570</guid><author>wbvalid</author><pubDate>Sat, 12 Jun 2021 17:55:07 +0800</pubDate><description><![CDATA[三、内存所有权
内存的错误管理是C++程序中最常见的问题之一。此类问题发生的原因多数是源于对内存所有权概念的模糊。于是，我们的程序中就出现了诸如：内存泄漏，访问未经初始化的内存，内存超限使用，以及其他难以排错的问题。现代C++中存在一套内存所有权管理的惯用法，这些方法允许程序员清除地表达他们对于内存所有权方面的设计意图。这样一来，我们就能更容易地写出正确分配、访问以及释放内存的优良代码。
以下为本章中将要讨论的主题：

什么是内存所有权？
一个良好的资源所有权设计应该是什么样的？
什么时候需要质疑自己关于资]]></description><category></category></item><item><title><![CDATA[C++设计模式由浅入深（二）—— 类模板和函数模板]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/117589297</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/117589297</guid><author>wbvalid</author><pubDate>Sat, 05 Jun 2021 11:01:34 +0800</pubDate><description><![CDATA[二、类和函数模板
C++的模板编程特性是一个又大又复杂的话题，有许多著作专门传授这种特性和技巧。在本书中，我们会用到许多C++中的高级泛型编程特性。那么我们该如何去理解贯穿次数中的这些语言结构呢？本章采用了非正式的方法，抛弃那些精准的定义，我们通过例子来演示如何使用模板以及解释这些语言特性具体做了什么。如果你觉得在这里遇到了知识盲区，我建议可以通过阅读关于C++语法和语义的专著来加深你的理解。当然，如果读者想要知道精准的定义，可以参考C++标准文档。
下面是本章将要讨论的主题：

C++中的模板
类模板和函]]></description><category></category></item><item><title><![CDATA[C++设计模式由浅入深（一）—— 继承和多态]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/117574231</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/117574231</guid><author>wbvalid</author><pubDate>Fri, 04 Jun 2021 22:21:40 +0800</pubDate><description><![CDATA[一、继承和多态
C++首先是一个面向对象的语言，对象是C++程序的基石。通过类的继承和派生，软件工程师可以自由表达对软件系统中各个部分之间的关系与交互逻辑，定义各个组件之间的接口和实现，有秩序地组织起数据结构和代码。本书的目的不是为了教授C++语言，本章的要义是为了帮助读者理解C++语言特性中与类和继承相关的知识，有助于后续章节的展开。因此，我不会事无巨细地描述C++中类及其相关工具的具体用法，而是会介绍贯彻本书中的基础概念和语言结构。
本章我们将要讨论：

C++中的类是什么？它在C++语言中扮演什么样的]]></description><category></category></item><item><title><![CDATA[关于STL容器vector与移动构造函数的小坑]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/116333853</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/116333853</guid><author>wbvalid</author><pubDate>Sat, 01 May 2021 23:36:50 +0800</pubDate><description><![CDATA[最近在做一个线程类，考虑到将来会用STL容器来存放线程类的对象（后来思考了一下存智能指针也许会更好，详见后文分析），因此在设计线程类的时候，就主动声明了复制构造函数和左值引用赋值运算符为delete。然后手动实现了移动构造函数和右值引用赋值运算符，大概如下：
//因为考虑到线程类可能没有动态多态的需求，就用CRTP实现了静态多态
//头文件就略了
template&lt;class Derived&gt;
class ThreadBase
{
protected:
    std::unique_ptr&l]]></description><category></category></item><item><title><![CDATA[WSL无法访问网络的解决办法]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/115540217</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/115540217</guid><author>wbvalid</author><pubDate>Fri, 09 Apr 2021 10:40:25 +0800</pubDate><description><![CDATA[今天在用WSL的时候突然网络抽风，域名解析出了问题，apt update都用不了

网上查了很多方法，什么vEthernet的IP啊，ifconfigip啊，ip route add default啥的，都不管用。最后还是看了一下/etc/resolv.conf的配置，里面的nameserver字段显然是不对的，另外上面的注释提示了说这个文件是由WSL自动生成的，如果不希望自动生成，则请在/etc/wsl.conf里面设置一下：

我就按照配置文件的说法在/etc/wsl.conf中写下了这行，然后打开po]]></description><category></category></item><item><title><![CDATA[VScode C++头文件问题的终极解决办法]]></title><link>https://blog.youkuaiyun.com/wbvalid/article/details/115001149</link><guid>https://blog.youkuaiyun.com/wbvalid/article/details/115001149</guid><author>wbvalid</author><pubDate>Fri, 19 Mar 2021 11:02:41 +0800</pubDate><description><![CDATA[VScode C++头文件问题的终极解决办法
之前在配置VScode环境的时候，按照网上的文章配置，总是找不到头文件，搜索解决方案，都是千篇一律，没有说到重点。在此详细解释一下。
局部配置全局配置傻傻分不清楚
网上很多文章都在讲一个配置文件c_cpp_properties.json，但是有些人不知道什么原因是找不到这个配置文件的。在扩展面板中，点击C++的设置进入的页面其实是通用设置页面，大概长这样：

这里只能看到"在settings.json中编辑"的选项，无论怎么写，都不可能生效，因为真正的配置文件在]]></description><category></category></item></channel></rss>