Overview of Volleyball 1. Liga Czech Republic
The Czech Republic's 1. Liga stands as one of the most competitive volleyball leagues in Europe, featuring top-tier teams that consistently push the boundaries of skill and strategy. As we look towards tomorrow's matches, anticipation is high among fans and bettors alike, eager to witness thrilling games and make informed predictions.
With a rich history dating back several decades, the league has produced numerous talented players who have gone on to achieve international success. The upcoming matches promise to be a showcase of this talent, with each team bringing its unique style and strengths to the court.
Key Teams and Players to Watch
- Olymp Praha: Known for their aggressive playstyle and strong defense, Olymp Praha is always a formidable opponent. Keep an eye on their star player, Jan Novák, whose powerful spikes have been crucial in past victories.
- Dukla Liberec: With a reputation for strategic gameplay and excellent teamwork, Dukla Liberec has consistently been at the top of the league standings. Their setter, Petra Vondráčková, is renowned for her precise ball distribution.
- Volejbal Brno: This team is celebrated for its resilience and ability to perform under pressure. Watch out for their libero, Tomáš Horák, whose defensive skills are second to none.
Tomorrow's Match Highlights
The upcoming matches feature some of the most anticipated matchups in the league this season. Here’s what you can expect:
Olymp Praha vs. Dukla Liberec
This clash between two titans is expected to be a tactical battle from start to finish. Both teams have had impressive runs this season, making this game a must-watch for any volleyball enthusiast.
Volejbal Brno vs. Slavia Prague
Volejbal Brno will be looking to leverage their home-court advantage against Slavia Prague. Known for their fast-paced offense, Volejbal Brno will aim to disrupt Slavia’s rhythm with quick transitions.
Betting Predictions: Expert Insights
As we approach tomorrow’s games, expert analysts have provided their betting predictions based on current form, head-to-head statistics, and recent performances:
Olymp Praha vs. Dukla Liberec
- Prediction: A close match with Dukla Liberec slightly favored due to their consistent performance throughout the season.
- Betting Tip: Consider betting on Dukla Liberec winning by a narrow margin (1-2 sets).
Volejbal Brno vs. Slavia Prague
- Prediction: Volejbal Brno is predicted to win in straight sets due to their strong home record.
- Betting Tip: A safe bet would be on Volejbal Brno winning all sets (5-0 or 5-1).
Analyzing Team Strategies
To make informed betting decisions, understanding each team's strategy is crucial:
Olymp Praha's Strategy
Olymp Praha often relies on aggressive blocking and quick counterattacks. Their ability to read opponents’ plays allows them to execute timely blocks and transition into offense rapidly.
Dukla Liberec's Approach
Dukla Liberec excels in setting up plays through meticulous ball handling and strategic positioning. Their focus on minimizing errors while maximizing scoring opportunities makes them a tough competitor.
Volejbal Brno's Tactics
Volejbal Brno emphasizes speed and precision in their attacks. Their ability to maintain high tempo throughout matches often overwhelms opponents unprepared for such intensity.
Injury Updates and Player Conditions
Recent injury reports indicate that both Olymp Praha and Dukla Liberec are missing key players due to minor injuries sustained during practice sessions:
- Olymp Praha: Middle blocker Marek Černý is recovering from a shoulder strain but may play with limited mobility.
- Dukla Liberec: Outside hitter Eva Novotná is sidelined with an ankle sprain but should return soon.
Volejbal Brno remains fully fit with no significant injuries reported ahead of tomorrow’s match against Slavia Prague.
Past Performances: Statistical Analysis
An analysis of past performances provides insights into potential outcomes for tomorrow’s games:
Olymp Praha vs. Dukla Liberec Historical Data
- In previous encounters this season, both teams have won one match each at home courts.
- Average scorelines suggest tightly contested matches with scores typically around 25-23 per set.
Volejbal Brno vs. Slavia Prague Previous Matches
- Volejbal Brno has dominated recent meetings against Slavia Prague with three consecutive wins last season.
- Scores have generally favored Volejbal Brno by approximately two sets per match when playing at home.
Fan Expectations and Community Reactions
#include "stdafx.h"
#include "Helper.h"
// Get current time
int64_t Helper::GetTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec *1000000 + tv.tv_usec;
}
// Get current time in string format
std::string Helper::GetTimeStr()
{
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer,sizeof(buffer),"%Y-%m-%d %H:%M:%S",timeinfo);
return std::string(buffer);
}
// Sleep function
void Helper::Sleep(int64_t microSeconds)
{
if(microSeconds <=0)
return;
struct timespec req = {0};
req.tv_sec = microSeconds /1000000;
req.tv_nsec = (microSeconds %1000000) *1000;
nanosleep(&req,NULL);
}
// Convert int64_t value into string
std::string Helper::Int64ToString(int64_t value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
// Convert string into int64_t value
int64_t Helper::StringToInt64(std::string strValue)
{
int64_t ret = -1;
try {
ret = boost::lexical_cast
(strValue);
}
catch(boost::bad_lexical_cast &e) {
LOG_ERROR("boost bad lexical cast exception");
}
return ret;
}
// Convert int32_t value into string
std::string Helper::Int32ToString(int32_t value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
// Convert string into int32_t value
int32_t Helper::StringToInt32(std::string strValue)
{
int32_t ret = -1;
try {
ret = boost::lexical_cast(strValue);
}
catch(boost::bad_lexical_cast &e) {
LOG_ERROR("boost bad lexical cast exception");
}
return ret;
}
// Convert uint8 array into hex string
std::string Helper::BytesToHexString(const uint8* data,uint16 len)
{
std::ostringstream oss;
for(uint16 i=0;i>std :: hex >>tempByte;
bytes[i]=tempByte;
}
return bytes;
}<|file_sep#include "stdafx.h"
#include "DBManager.h"
#include "Logger.h"
DBManager g_dbManager;
DBManager::~DBManager()
{
}
bool DBManager::_Init()
{
LOG_INFO("init mysql database ...");
const char* server="localhost";
const char* user="root";
const char* password="123456";
const char* database="test";
if(!mysql_init(&_mysql)){
LOG_ERROR("mysql init failed");
return false;
}
if(!mysql_real_connect(&_mysql,
server,
user,
password,
database,
mysql_get_server_version(_mysql),
NULL,
CNX_PROTOCOL_41)){
LOG_ERROR("mysql real connect failed");
mysql_close(&_mysql);
return false;
}
mysql_query(&_mysql,"set names 'utf8'");
if(mysql_error(&_mysql)){
LOG_ERROR("set names utf8 failed");
mysql_close(&_mysql);
return false;
}
LOG_INFO("init mysql database ok");
return true;
}
bool DBManager::_Destroy()
{
mysql_close(&_mysql);
LOG_INFO("destroy mysql database ok");
return true;
}
bool DBManager::_ExecuteSql(const std :: string& sql,std :: vector>& result,bool bIsSelectQuery/* =true*/)
{
if(mysql_query(&_mysql,(const char*)sql.c_str())){
LOG_ERROR("execute sql[%s] failed[%s]",sql.c_str(),(const char*)mysql_error(&_mysql));
if(bIsSelectQuery){
result.clear();
}
return false;
}
MYSQL_RES *res=NULL;
if(bIsSelectQuery){
res=mysql_store_result(&_mysql);
if(res==NULL){
LOG_ERROR("store result failed[%s]",(const char*)mysql_error(&_mysql));
if(res!=NULL){
mysql_free_result(res);
}
result.clear();
return false;
}
MYSQL_ROW row=NULL;
while((row=mysql_fetch_row(res))!=NULL){
std :: vector rowData;
unsigned int numFields=mysql_num_fields(res);
for(unsigned int i=0;izhangxinxiang/CppStudy<|file_sep office2016安装过程中出现的问题
# 环境准备
## 关闭防火墙
### Windows防火墙
关闭Windows防火墙,需要先去掉防火墙保护,然后再关闭服务。
### 防火墙规则设置
netsh advfirewall firewall set rule group="windows defender" new enable=no
### 关闭服务
net stop wscsvc && net stop WinDefend && net stop MsMpSvc && net stop mpsvc && sc config wscsvc start= disabled && sc config WinDefend start= disabled && sc config MsMpSvc start= disabled && sc config mpsvc start= disabled
### 查看防火墙状态
netsh advfirewall show allprofiles state
## 关闭UAC(用户账户控制)
进入注册表:`regedit.exe`,找到键值:`HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem`,在里面新建一个DWORD类型的值(名称为EnableLUA),并将其数值设为`0`。这样就可以关闭UAC了。
## 安装office2016
进入官网下载页面:https://www.office.com/ ,选择需要安装的版本,点击下载。安装包会自动下载到默认位置(C:UsersAdministratorDownloads)。
双击安装包运行,然后按照提示进行安装即可。
# 安装过程中出现的问题及解决方法
## Error Code:30085-52
错误原因:由于网络不稳定导致无法连接到微软服务器。
解决办法:
1、关掉所有打开的浏览器窗口;
2、关闭office应用程序;
3、重新启动计算机;
4、重新运行安装程序。
## Error Code:30088-4
错误原因:由于网络不稳定导致无法连接到微软服务器。
解决办法:
重复上面第一条步骤即可。
## Error Code:30088-10
错误原因:由于网络不稳定导致无法连接到微软服务器。
解决办法:
重复上面第一条步骤即可。
## Error Code:30088-15
错误原因:由于网络不稳定导致无法连接到微软服务器。
解决办法:
重复上面第一条步骤即可。<|repo_name|>zhangxinxiang/CppStudy<|file_sep standalone server example code
# 环境准备
## 安装redis
进入官网下载页面:https://redis.io/download ,选择需要安装的版本,下载完成后进行解压缩。
双击 `redis-server.exe` 运行 redis-server ,会自动启动 redis-server 的服务。
双击 `redis-cli.exe` 运行 redis-cli ,会自动启动 redis-cli 的客户端。
# 编译运行
编译时只需添加如下头文件和库文件即可:
头文件:
# include "db/redis/client.h"
# include "db/mysql/client.h"
库文件:
libevent.lib libssl.lib libcrypto.lib ws2_32.lib libmysqld.lib libuv.a libz.a libevent.a hiredis.lib pthreadVCrtd.lib zlibstaticMTd.lib cryptodllMTd.lib wsock32MTd.lib ipch_staticMTd.lib Wldap32MTd.lib advapi32MTd.lib dbghelpMDd.lib secur32MDd.lib shell32MDd.lib shlwapiMDd.lib bcryptMDd.lib psapiMDd.lib uuidMDd.lib userenvMDd.lib ntdllMDd.
<|repo_name|>zhangxinxiang/CppStudy<|file_sepcpp基础知识点总结
# 概述
cpp基础知识点总结。
# 参考资料
[C++ Primer Plus 第五版](https://book.douban.com/subject/3616837/)
[深入理解 C++11](http://www.kuqin.com/blog/bookpage/134.html)
[深度历险 C++11](http://www.kuqin.com/book/show/1179)
[C++ Primer Plus 第六版](https://book.douban.com/subject/26913156/)
# 基本概念
## 数据类型
### 基本数据类型
| 类型 | 存储大小 | 范围 |
| ------ | -------- | ------ |
| bool | | true/false |
| char | | -128~127或者0~255 |
| short int | | |
| int | | |
| long int | | |
| float | | |
| double || |
### 枚举类型 enum
cpp
enum color{ red , green , blue };
枚举变量只能被赋予枚举类型定义中列出来的值。默认情况下,第一个枚举值从零开始递增。
枚举变量也可以被隐式转换成整形变量。
### 用户自定义数据类型 typedef
cpp
typedef struct _tagPoint {
int x ;
int y ;
} Point ;
typedef 可以用来给已经存在的数据类型起个别名。也可以使用typedef给struct、union和enum等自定义数据类型起别名。
## 常量与常变量 const
cpp
const double pi = acos(-1) ;
const double e = exp(1) ;
const Point origin( {0 , 0} ) ;
const修饰符用来修饰常量对象或者常变量对象。一旦对其进行初始化之后就不能再修改该对象所指向的内存空间中存储的值。const修饰符通常与指针配合使用,在函数参数列表中修饰传递给函数的参数。
## 引用 reference
引用是某个已经存在对象的别名。引用必须在定义时初始化,并且在使用前必须初始化。引用本身没有实际意义,它只是某个已经存在对象的别名而已。引用不能被改变(指向其他对象)。引用必须和其所绑定的对象同生共死。
## 指针 pointer
指针是一个保存了内存地址的变量。指针也是有自己独立生命周期的,并且具有自己独立内存空间来保存内存地址信息。
## 函数 function
函数是完成特定功能模块化代码段,在函数体内部编写完成特定功能模块化代码段,并通过函数调用将这些代码段组合在一起完成完整功能模块化代码段。
## 类 class
类是用户定义的数据类型,类是通过属性和方法来封装相关联功能模块化代码段,并通过构造函数对类进行实例化操作从而生成类对象。
# 运算符
## 算术运算符 arithmetic operator
整数除法取整商(向零方向取整);
浮点数除法取小数商;
小数乘以整数结果为小数;
整数乘以整数结果为整数;
## 关系运算符 relational operator
== 和 != 是相等运算符和不相等运算符;
> 和 >= 是大于运算符和大于等于运算符;
< 和 <= 是小于运算符和小于等于运算符;
## 赋值运算符 assignment operator
+= , -= , *= , /= 和 %= 是赋值加减乘除求余运算符;
## 条件逻辑运算符 logical operator
! 是逻辑非操作符,返回一个布尔值结果;
& 和 | 是位与操作符和位或操作符;
^ 是位异或操作符;
&& 和 || 是逻辑与操作符和逻辑或操作符;
# 控制流语句
控制流语句主要分为以下三种:
if else 判断语句;
switch case 分支语句;(switch case 中只能判断整型、字符型、枚举型)
while 循环语句;do while 循环语句;for 循环语句;for range 循环语句(C++11新增)
break continue goto 标签跳转语句;
# 内置库函数 built-in function
abs(x) 返回 x 的绝对值;abs(xl) 返回 xl 的绝对值;abs(xl&) 返回 xl& 的绝对值;abs(lx) 返回 lx 的绝对值。(注意区分 xl/lx)
sqrt(x) 返回 x 的平方根。(x 必须为正数)
pow(a,b) 返回a^b (a^b表示a次幂b)。(a,b 必须为浮点型或者整型)
ceil(x) 向正无穷方向舍入返回最接近 x 的最大整型数字。(x 必须为浮点型)
floor(x) 向负无穷方向舍入返回最接近 x 的最小整型数字。(x 必须为浮点型)
round(x) 四舍五入返回最接近 x 的最近邻整型数字。(x 必须为浮点型)
fmod(a,b) 返回两个浮点数相除得到余数。(a/b 表示两个浮点数相除得到商)。(a,b 必须为浮点型)
log(x,y,z...) 对 z 序列中每个元素求 log(y,x),并将这些求得结果作为新序列返回。(y,x 必须为浮点型)(z 序列中每个元素必须为浮点型)
exp(x,y,z...) 对 z 序列中每个元素求 y 次幂,并将这些求得结果作为新序列返回。(y,x 必须为浮点型)(z 序列中每个元素必须为浮点型)
sin/cos/tan/sin/cos/tan... 对 z 序列中每个元素求 sin/cos/tan/sin/cos/tan...(角度单位弧度),并将这些求得结果作为新序列返回。(z 序列中每个元素必须为浮点型)
fabs(x,y,z...) 对 z 序列中每个元素求绝对值,并将这些求得结果作为新序列返回。(z 序列中每个元素必须为浮点型)
atof(str,... ) 对 str 字串序列中每个字串转换成 float 类型,并将这些转换后得到 float 类型数组作为新序列返回。(str 字串序列必须都可以转换成 float 类型才能成功转换)
atoi(str,... ) 对 str 字串序列中每个字串转换成 integer 类型,并将这些转换后得到 integer 类型数组作为新序列返回。(str 字串序列表示都可以转换成 integer 类型才能成功转换)
atof(str,... ) 和 atoi(str,... ) 都属于字符串处理相关函数。
# 数组 array
数组是一个具有相同数据类型并按照索引方式访问单元内容的线性表数据结构。数组声明时需要指明数组大小(例如:int arr[10];)数组大小声明之后不能改变大小(例如:arr[20]; 不合法)数组大小仅限于非负整形范围内(例如:arr[-10]; 不合法)。数组默认初始单元内容为空白未定义状态。
数组索引从零开始编号(例如:arr[9] 访问第十号单元),越界访问单元内容会造成程序异常结束执行状态(例如:arr[10] 访问第十一号单元)。
数组单元之间互不相关联,各自独立存在各自生命周期内有效。当超出当前生命周期外访问单元内容时会造成程序异常结束执行状态(例如:局部数组超出当前局部生命周期外访问单元内容时会造成程序异常结束执行状态)。
# 结构体 struct
结构体是一种用户自定义数据类型,在结构体声明时可以同时声明多个字段并指明字段具体属性及其数据类型信息。结构体也称作联合体 union,在结构体声明时如果同时声明多种不同数据类型字段则属于联合体 union 而非结构体 struct 。
# 枚举 enum
枚举是一种用户自定义数据类型,在枚举声明时可以同时声明多种枚举项并指明枚举项具体属性及其默认关联数字信息,默认情况下第一个枚举项从零开始依次递增关联数字信息。
# 共享库 shared library
共享库也称动态链接库 dll 或者 so 文件,在共享库加载至虚拟地址空间时需要提供映射表信息才能正常工作,共享库提供了二进制共享资源方式使多个应用程序共享同一份资源而节省系统资源占用率。
共享库主要分两种:
dll 在 windows 平台下使用,
so 在 linux/unix 平台下使用,
共享库通常包含若干公开接口供外部调用,
共享库加载至虚拟地址空间后只占据少量虚拟地址空间但实际物理内存占据率较高,
共享库加载至虚拟地址空间后共享内存区域实际物理内存区域仍然有效直至所有加载此共享库进程全部退出释放该物理内存区域才真正释放该物理内存区域,
共享库加载至虚拟地址空间时由 loader 动态链接器负责创建映射表信息,
dll 和 so 区别主要在开发平台上,
在 windows 平台下开发应用程序通常采用静态链接方式直接打包 dll 文件,
在 linux/unix 平台下开发应用程序通常采取动态链接方式通过配置脚本文件 ldconfig.conf 打包 so 文件,
使用场景:
开发平台与目标平台相同,则推荐静态链接方式打包 dll 或者 so 文件,
开发平台与目标平台不同,则推荐动态链接方式打包 dll 或者 so 文件,
使用方法:
在 windows 平台下通过 LoadLibrary() 加载 dll 文件,
在 linux/unix 平台下通过 dlopen() 加载 so 文件,
注意事项:
在 windows 平台下采取静态链接方式打包 dll 文件需注意以下事项:
如果源码文件直接调用了某dll文件提供公开接口则源码编译生成 exe 执行文件时需同时提供该dll文件否则会造成exe执行失败,
如果源码文件通过 LoadLibrary() 动态加载某dll文件提供公开接口则源码编译生成 exe 执行文件时需同时提供该dll文件否则会造成exe执行失败,
在 linux/unix 平台下采取静态链接方式打包 so 文件需注意以下事项:
如果源码文件直接调用了某so文件提供公开接口则源码编译生成可执行二进制格式执行文件时需同时提供该so文件否则会造成可执行二进制格式执行文件执行失败,
如果源码文件通过 dlopen() 动态加载某so文件提供公开接口则源码编译生成可执行二进制格式执行文件时需同时提供该so文件否则会造成可执行二进制格式执行文件执行失败,
另外还有一种情况就是在 Linux 下我们可以采取 LD_PRELOAD 环境变量预先设置好所要加载哪些.so 动态链接库来达到覆盖掉系统预设好已经加载好所要覆盖.so 动态链接库所提供公开接口功能模块化代码段效果达到替换.so 动态链接库功能模块化代码段效果,
示例代码如下:
// loadLibrary.cpp : Defines the entry point for the console application.
//
// gcc loadLibrary.cpp -o loadLibrary.exe -lmylib.dll -lmylib.so -ldl -I ./include/
//
// ldconfig.conf sample:
// /usr/local/lib/mylib.so -> /usr/local/lib/libmylib.so.x.y.z
// /usr/local/lib/libmylib.so.x.y.z -> /usr/local/lib/libmylib.so.x.y.z.ver
//
// Note: This file was generated by test_gcc.sh.
//
// To build:
// gcc loadLibrary.cpp -o loadLibrary.exe -lmylib.dll -lmylib.so -ldl -I ./include/
//
// To run:
// export LD_PRELOAD=./build/mylib.so.x.y.z.ver:$LD_PRELOAD ./build/loadLibrary.exe
//#include "../include/myLib.h"
//#include "../include/myLibDll.h"
//#define _GNU_SOURCE /* See feature_test_macros(7). */
//#define _POSIX_C_SOURCE /* See feature_test_macros(7). */
//#define _XOPEN_SOURCE /* See feature_test_macros(7). */
#include
static void printUsage(char **argv);
static void printHelp(void);
static void printVersion(void);
static void printEnv(void);
static void usage(int argc,char **argv,int status);
static void help(void);
static void version(void);
static void env(void);
/// Test myLib.dll functions.
///
/// Usage:
///
/// $ ./loadLibrary.exe --help
/// Test myLibDll.dll functions.
///
/// Usage:
///
/// $ ./loadLibrary.exe --help
extern "C" {
extern void myLibFunc();
extern double myLibAdd(double,double);
extern double myLibSub(double,double);
extern double myLibMul(double,double);
extern double myLibDiv(double,double);
extern void myLibDllFunc();
extern double myLibDllAdd(double,double);
extern double myLibDllSub(double,double);
extern double myLibDllMul(double,double);
extern double myLibDllDiv(double,double);
}
using namespace std;
FILE *fp;
main(int argc,char **argv){
fp=fopen("./log.txt","w+");
fprintf(fp,"argc=%un",argc);
if(argc==1){
fprintf(fp,"argc==1n");
usage(argc,(char **)argv,-1);
}
else{
fprintf(fp,"argc!=1n");
switch(argv[1][1]){
case 'V':
version();
break;
case 'v':
help();
break;
case 'E':
env();
break;
default:
usage(argc,(char **)argv,-42);
}
}
fclose(fp);
}
static void printUsage(char **argv){
printf("%s [-vhE]n",argv[0]);
printf("n");
printf("%sn", argv[0]);
printf("n");
printf("-V|--versionttPrint version information.n");
printf("-v|--helpttPrint help information.n");
printf("-E|--envttPrint environment information.n");
printf("n");
}
static void printHelp(void){
printUsage(NULL);
}
static void printVersion(void){
printUsage(NULL);
}
static void printEnv(void){
printUsage(NULL);
}
static void usage(int argc,char **argv,int status){
if(status==-42){
fprintf(stderr,"%s : invalid argument '%s'n",argv[0],argv[1]);
fprintf(stderr,"t%sn", argv[0]);
fprintf(stderr,"t%sn","Try '%s --help' or '%s --version' for more information.");
exit(EXIT_FAILURE);
}
else if(status==-1 || status==EXIT_SUCCESS || status==EXIT_FAILURE){
fprintf(stderr,"%s : invalid argument(s)n",argv[0]);
fprintf(stderr,"t%sn", argv[0]);
fprintf(stderr,"t%sn","Try '%s --help' or '%s --version' for more information.");
exit(EXIT_FAILURE);
}
else{
exit(status);
}
}
static void help(void){
FILE *fp=fopen("./log.txt","w+");
fprintf(fp,"argc=%un",argc);
fclose(fp);
printUsage(NULL);
}
static void version(void){
FILE *fp=fopen("./log.txt","w+");
fprintf(fp,"argc=%un",argc);
fclose(fp);
printUsage(NULL);
}
static void env(void){
FILE *fp=fopen("./log.txt","w+");
fprintf(fp,"argc=%un",argc);
fclose(fp);
printUsage(NULL);
}
<|file_sep|# c++ primer plus 第五版学习笔记
# 环境准备
## 安装gcc/g++
参考资料见 https://gcc.gnu.org/
注意事项:
g++ 版本号要大于4.x (g++ 版本号低于4.x 编译出错)
gcc 版本号要大于4.x (gcc 版本号低于4.x 编译出错)
gdb 版本号要大于7.x (gdb 版本号低于7.x 调试出错)
clang 版本号要大于6.x (clang 版本号低于6.x 编译出错)
lldb 版本号要大约9.x (lldb 版本号低版本 lldb 调试可能出错)
cmake 版本号要大约>= vesion-xxx (cmake 版本太低可能导致 cmake build 失败)
cmake-gui 已经更新过往往比较旧 cmake-gui 可能导致 cmake-gui 启动失败 cmake-gui 组件太老可能导致 cmake-gui 启动失败 cmake-gui 组件太老可能导致 cmake-gui ui 显示乱码
ubuntu18 安装 g++
sudo apt-get install build-essential g++
sudo apt-get install gdb lldb clang lldb-vscode clang-format clang-tidy clang-analyzer doxygen graphviz valgrind lcov cppcheck ccache ccache-sysdeps lcov-bin wget curl unzip zip p7zip-full fakeroot syslinux syslinux-utils xorriso genisoimage mkisofs syslinux-extlinux sudo nano vim-nox vim-common git-core git-doc git-el emacs-nox emacs-goodies-el texinfo docbook-xsl docbook-mathml texlive-latex-extra texlive-font-utils texlive-lang-cjk texlive-lang-other texlive-font-restricted texlive-font-extra dvipng imagemagick ghostscript gsfonts ttf-wqy-microhei ttf-wqy-zenhei fonts-arphic-bkai00mp fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp fonts-noto-cjk fontconfig-config fontconfig fontconfig-doc fonts-dejavu-core fonts-droid-fallback fonts-ipafont-mincho fonts-ipafont-mplus ipa-pgothic libreoffice-writer libreoffice-base libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-impress libreoffice-math libreoffice-report-builder-bin openjdk-