CMake导入第三方库 及 新Centos7环境配置 2022.7.1记

凡是有动态编译,都要加-Wl,-rpath,./lib,然后把gcc/g++动态库放到lib下,

因为运行时动态库的搜索路径第一是搜索路径是编译目标代码时指定的动态库路径

要养成好习惯,才能避免编译器环境不对时,还要加进来的繁琐

目录

〇、前言 - Linux下gcc默认搜索头文件及库文件的路径

1. 头文件

2. 库文件

3. 运行时动态库的搜索路径

4、c++的官方静态库(libstdc++.a)和动态库 ( libstdc++.so.6 ) 的位置

一、CMake导入第三方库及编译

〇、 [ 重要]  前言

1、cmake分别添加静态库和动态库及编译

2、ubuntun、centos出现bind: permission denied解决方法

3、Cmake 添加静态库和动态库的  解析

4、Cmake编译有共享内存程序的坑(添加-pthread参数?  解析)

5、程序运行时添加外部库的方法(添加-Wl,-rpath的  解析)

二、关于新Centos7初次需要做的事情 

1、 Centos7已安装gcc但未安装g++

2、 Centos7安装Openssl

3、Centos7 [安装\升级] CMake

4、Centos7 [安装\升级] Make

5、Centos7 [安装\升级]  [gcc/g++]

6、关于CMake指定编译器(gcc/g++)的问题

7、Centos7 [安装\升级]  [gdb]

8、关于Linux添加环境变量的方法

 三、Centos7 [安装\升级]  其他软件

1、Centos7 [安装\升级]  Python3.6.9

2、Centos7 [安装\升级]  Python Virtualenv

四、 [优质]   学习资源

[优]CMake学习:

[优]libhv库:

[优]C/C++ [框架/库] :

Cmake简单的学习:

其它 C/C++ [框架/库] :


〇、前言 - Linux下gcc默认搜索头文件及库文件的路径

1. 头文件

gcc在编译时如何去寻找所需要的头文件:

1、头文件的搜索会从 -I 指定的目录开始;
2、然后搜索gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH 设置的目录;
3、再搜索系统目录  /usr/include  和  /usr/local/include 
4、最后搜索gcc的一系列自带目录(如/usr/include/c++/4.8.5)。

2. 库文件

编译的时候:

  1. gcc会先搜索    -L 指定的目录;
  2. 再搜索gcc的环境变量    LIBRARY_PATH
  3. 再搜索系统目录:/lib和/lib64 /usr/lib 和/usr/lib64 /usr/local/lib和/usr/local/lib64 ,这是当初compile gcc时写在程序内的。

3. 运行时动态库的搜索路径

动态库的搜索路径搜索的先后顺序是:

  1. [注意!!!!!]    编译目标代码时指定的动态库搜索路径;这是第一
  2. 环境变量    LD_LIBRARY_PATH 指定的动态库搜索路径;
  3. 配置文件    /etc/ld.so.conf 中指定的动态库搜索路径;
  4. 默认的动态库搜索路径    /lib 
  5. 默认的动态库搜索路径    /usr/lib

4、c++的官方静态库(libstdc++.a)和动态库 ( libstdc++.so.6 ) 的位置

先查询c++的官方静态库(libstdc++.a)和动态库 ( libstdc++.so.6 ) 在哪  

至于为什么动态库后缀是.6,我也不清楚,运行其他程序错误就是这样提示的如图

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第1张图片

查询c++的官方静态库(libstdc++.a)和动态库 ( libstdc++.so.6 )

find / -name "libstdc++*"

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第2张图片

一、CMake导入第三方库及编译

〇、 [ 重要]  前言

不是我的代码要调用gcc/g++的库,而是第三方库设计共享内存要调用gcc/g++的库,为此,参数还加了-pthread。

所以  有三种编译方式

                       gcc/g++库                        第三方库

                        静态编译                         静态编译

                        动态编译                         静态编译

                        动态编译                         动态编译

最后一种,已经试过了,不行,而且最后一张错误警告已经说了,是libhv.so请求的,它找不到,至于这三种为什么可以,很好理解,

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第3张图片

1、cmake分别添加静态库和动态库及编译

1、  [优优]     gcc官方库 libstdc++.a静态编译    ,   第三方库也是静态编译

上文已经知道libstdc++.a的位置,把libstdc++.a移到static文件夹下,并重命名为libstdc++_static.a作区分

原因:根据gcc/g++编译时库文件搜索顺序,会先搜索默认路径,里面有静态库和动态库,又因为系统优先编译动态库,所以系统就直接编译默认路径下动态库,就不会静态编译静态库了,同理,libhv_static.a也是因为此才放到static文件夹,名字也重命名了libhv_static.a,用来和默认路径下的libhv.a做区分

至于为什么include文件夹下没有libhv库的头文件,因为默认路径include里有一个hv的文件夹,里面是libhv库的头文件,要使用hv文件夹里面的头文件,这样写#include "hv/HttpServer.h"。因为,搜索头文件或库时,不会搜索子文件夹下的噢~。所以加上hv/

proj2
├── bin
├── build
├── CMakeLists.txt
├── include
├── lib
│   ├── shared
│   └── static
│       ├── libhv_static.a
│       └── libstdc++_static.a
├── main.cpp
└── src

cmake_minimum_required(VERSION 3.10)

PROJECT(hello)
set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -pthread   ")
#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

include_directories(${PROJECT_SOURCE_DIR}/include)


link_directories(${PROJECT_SOURCE_DIR}/lib/static)


aux_source_directory(./src SRC_SUB)
aux_source_directory(. SRC_CUR)

add_executable(hello ${SRC_SUB} ${SRC_CUR})
target_link_libraries(hello PUBLIC  hv_static)
target_link_libraries(hello PUBLIC  stdc++_static)

第四步,最后:我在想,是否可以用其他版本gcc/g++编译器去编译这个代码,没试,尽管我们可以在cmake里指明了需要编译的库,但是头文件还是旧版本的,头文件和库不一致,估计有问题,最好不要尝试!不要说cmake可以指明头文件,因为它还是会先搜索默认路径,见上文前言

2、  [优优优]     gcc官方库 libstdc++.so.6动态编译    ,   第三方库也是动态编译

运行在其他主机,但是gcc/g++编译器版本不一致,没关系,因为首先在编译目标代码时指定的动态库进行搜索

还有要记得-Wl,-rpath,./lib参数 

proj2

├── bin

│   └──lib
├── build
├── CMakeLists.txt
├── include
│   └── hv
├── lib
│   └── libhv
│       ├── shared
│       └── static
├── main.cpp
└── src

cmake_minimum_required(VERSION 3.10)

PROJECT(hello)

set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -Wl,-rpath,./lib")
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
include_directories(${PROJECT_SOURCE_DIR}/include)

link_directories(${PROJECT_SOURCE_DIR}/lib/shared)



aux_source_directory(./src SRC_SUB)
aux_source_directory(. SRC_CUR)

add_executable(hello ${SRC_SUB} ${SRC_CUR})

target_link_libraries(hello PUBLIC hv)

3、gcc官方库 libstdc++.so.6动态编译    ,   第三方库也是静态编译 

一般太少用,别扭

因为首先在编译目标代码时指定的动态库进行搜索

所以还有要记得-Wl,-rpath,./lib参数

.
├── bin
├── build
├── CMakeLists.txt
├── include
├── lib
│   ├── shared
│   └── static
│       └── libhv_static.a
├── main.cpp
└── src

 

cmake_minimum_required(VERSION 3.10)

PROJECT(hello)
set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -pthread  -Wl,-rpath,./lib")
#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
include_directories(${PROJECT_SOURCE_DIR}/include)


link_directories(${PROJECT_SOURCE_DIR}/lib/static)


aux_source_directory(./src SRC_SUB)
aux_source_directory(. SRC_CUR)

add_executable(hello ${SRC_SUB} ${SRC_CUR})

target_link_libraries(hello PUBLIC  hv_static)

2、ubuntun、centos出现bind: permission denied解决方法

出现这类提示的时候,表明当前用户没有权限进行 bind 操作。

在某些 Linux 云服务器提供商的运行环境中会出现。 

解决方式:

使用 sudo 切换为 root,然后在执行原操作

若centos提示permission denied

chmod -R 777 [文件、文件夹]


 

3、Cmake 添加静态库和动态库的  解析

需要一个路径位置,需要库文件名。

link_directories() 指定库位置

target_link_libraries(库) 添加库文件名。

注意:库文件名,会被自动添加前缀lib,后缀.so。最后就变成了这样  lib库.so

这样做,可以让动态连接写法简单些,但是规则要首先熟悉才行,要不就找不到库了。
 

上文第一段代码可看出区别,以上文为准

4、Cmake编译有共享内存程序的坑(添加-pthread参数?  解析)

使用cmake编译一个共享内存的程序(如把libhv_static.a编译到程序里,里面用到了共享内存),会用到多线程库thread,编译时出现

undefined reference to `pthread_mutexattr_init'。

3042a27d000d4e86bce99002f386e3bd.png

解决该问题,就是在CMakeLists.txt里面加上以下:

set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -pthread")

用不到共享内存可不加-pthread参数

上文第一段代码可看出区别

5、程序运行时添加外部库的方法(添加-Wl,-rpath的  解析

完整的参数是-Wl,-rpath=路径(-Wl,-rpath,路径)

注意l是小写,两个 - 不能少,逗号不能少

报错1:g++: error: unrecognized command line option ‘-WL,-rpath=路径’

             L大写导致的

报错2:/usr/bin/ld: cannot find rpath=路径: No such file or directory

            rpath前没加 -(减号) 导致
 

cmake_minimum_required(VERSION 3.10)

PROJECT(hello)
set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -Wl,-rpath,./lib")
#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

include_directories(${PROJECT_SOURCE_DIR}/include)


link_directories(${PROJECT_SOURCE_DIR}/lib/libhv/shared)


aux_source_directory(./src SRC_SUB)
aux_source_directory(. SRC_CUR)

add_executable(hello ${SRC_SUB} ${SRC_CUR})

target_link_libraries(hello PUBLIC  hv)

二、关于新Centos7初次需要做的事情 

1、 Centos7已安装gcc但未安装g++

1.检查gcc,可以看到版本号码,说明gcc已经安装

gcc -v

2.检查g++,提示“command not found”,说明g++未安装

g++ -v

3.安装g++

yum install gcc-c++

4.安装完毕检查g++,可以看到版本号码说明安装成功

g++ -v

2、 Centos7安装Openssl

yum install openssl openssl-devel -y

3、Centos7 [安装\升级] CMake

下载网址:Index of /files/v3.24

注意:首先需安装gcc、g++、Openssl

卸载之前的版本

解压

tar -zxvf  cmake-3.22.5.tar.gz

编译

cd cmake-3.22.5
./configure

安装

make 
make install

确认:

/usr/local/bin/cmake --version

建立软连接

ln -s /usr/local/bin/cmake /usr/bin/

确认(其他路径):

/cmake --version

##卸载这个安装cmake-3.22.5

#find / -name "cmake*"

##按照路径卸载相关文件夹和环境变量,然后参考上面安装

4、Centos7 [安装\升级] Make

#cd /usr/local/src/
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/make/make-4.3.tar.gz
tar xf make-4.3.tar.gz
cd make-4.3/
./configure
make
make install
make -v
# 此时的 make 还是3.82 与环境变量有关系
/usr/local/bin/make -v
# 这是我们刚安装的 make 它的版本是4.3
whereis make
# 找一下都有哪些 make
cd /usr/bin/
mv make make.bak
# 把默认的 make 改名
ln -sv /usr/local/bin/make /usr/bin/make
# 建立一个软连接
make -v
# 查看一下大功告成

5、Centos7 [安装\升级]  [gcc/g++]

 1、安装编译环境

$ yum groupinstall "Development Tools"
$ yum install glibc-static libstdc++-static

2、然后就是进入源码目录开始进行编译了,下面是连续的几个命令

https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-12.1.0/gcc-12.1.0.tar.gz
tar -zxvf gcc-12.1.0.tar.gz
cd gcc-12.1.0
./contrib/download_prerequisites
mkdir build
cd build

3、生成make文件并且编译,此处编译时间比较久

#第一个命令
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

#第二个命令
make

4、编译完成后,进行安装

make install 

5、安装完成后查看版本是否已经更新

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

输出结果,发现并没有更新到最新动态库

6、查找编译gcc时生成的最新动态库:

find / -name "libstdc++.so*"

7、可以看到我们生成的最新版本文件在这个位置:

/usr/local/lib64/libstdc++.so.6.0.30

8、下面我们就拷贝文件到lib目录,并重新建立软链接:

cp /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64/
cd /usr/local/lib64/
rm libstdc++.so.6
ln -sf /usr/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6

9、一切搞掂,最后我们再确认GLIBCxx的版本

strings /usr/lib64/libstdc++.so.6 |grep GLIBC

10、查找系统中gcc的位置

find / -name gcc

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第4张图片

 11、再运行

/usr/bin/gcc -v

gcc (GCC) 4.8.5

/usr/local/bin/gcc -v

gcc (GCC) 12.1.0

一般系统默认安装的在/usr/bin/gcc中,我们安装的在/usr/local/bin/gcc中

12、

其实就跟windows的环境变量一样,你装了两个,然后你指哪个他就用哪个。
第一步:因为系统默认使用此目录下的gcc,所以将/usr/bin/目录下gcc进行重命名为gcc4.8.5,也就是相当于备份。(换完名字之后想要再用4.8.5就可以使用gcc4.8.5 -v等命令)

mv /usr/bin/gcc /usr/bin/gcc4.8.5  #用法mv old_name new_name

13、

ln -s /usr/local/bin/gcc /usr/bin/gcc  #软链接
#在/usr/bin目录下生成名为gcc的快捷方式,其指向/usr/bin/local/目录下的gcc文件
#当运行gcc -v时,系统运行/usr/bin目录下的gcc,又因为是/usr/bin/local/gcc的
#快捷方式,所以实际运行的是/usr/bin/local/gcc

14、设置g++

mv /usr/bin/g++ /usr/bin/g++4.8.5
ln -s /usr/local/bin/g++ /usr/bin/g++

15、运行命令

gcc -v
g++ -v

大功告成

6、关于CMake指定编译器(gcc/g++)的问题

问题?

cmake时,c++编译器不是默认的(12.1.0)

cc3f36fa70d0420ab575c302357a4612.png

而且奇怪的是输入

g++ -v

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第5张图片

这个没错啊!

在网上也找了很多方法

例如在CMakeLists.txt的PROJECT前以及其后添加

SET(CMAKE_CXX_COMPILER “g++”)
或
SET(CMAKE_CXX_COMPILER “/usr/local/bin/g++”)
或
SET(CMAKE_CXX_COMPILER “/usr/local/bin/g++/usr/bin”)

然而一点用也没有

只有一个办法,如下

1、在运行cmake [..或.]前,在终端输入以下命令

 注意:export修改环境变量仅限于该次登陆操作,设置永久变量见下一段

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
#添加环境变量

        添加永久变量,避免每次重新开机都要修改一次

编辑 /etc/profile 文件 vim /etc/profile
文件末尾添加
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
然后退出输入命令:
source  /etc/profile

2、查询本机环境变量

export -p

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第6张图片

3、再cmake

 9498eeba90c241f8bde2005f376ba4d0.png

 成功

7、Centos7 [安装\升级]  [gdb]

首先先把原来的环境变量下的gdb删除

find / -name "gdb*"

rm -rf /usr/bin/gdb 

建议首先安装gmp,不然一会99%会报错

wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz

# 1. 对gmp-6.2.1.tar.xz进行解压
xz -d gmp-6.2.1.tar.xz && tar xvf gmp-6.2.1.tar
或者
# 2. 对gmp-6.2.1.tar.gz进行解压
tar -zxvf gmp-6.2.1.tar.gz

# 进入gmp目录
cd gmp-6.2.1
# 设置安装路径前缀,建议设置为/usr/local
./configure --prefix=/usr/local  --enable-cxx
# 开始编译安装
make
make check
sudo make install

cd /usr/local/lib
ls
# 大概会包含下面这些文件,基本上就说明安装成功了
# libgmp.a   libgmp.so.10      libgmpxx.la    libgmpxx.so.4.6.1
# libgmp.la  libgmp.so.10.4.1  libgmpxx.so    libgmpxx.so.4
# libgmp.so  libgmpxx.a

再来编译一个简单的测试

在Ubuntu18.04上编译安装GMP_风好衣轻的博客-CSDN博客_ubuntu安装gmp最近为了安装 IBM 的开源项目 HElib C++,需要在服务器上先安装GMP和NTL,NTL需要依赖GMP,所以先来安装一下GMP,记录一下在服务器上安装成功的过程:)直接安装libgmp二进制文件sudo apt-get install libgmp-dev如果选择直接安装编译好的二进制文件,可以跳到看「检查是否安装成功」部分进行测试;如果想要编译安装,就接着往下看~安装依赖我的系统是Ubuntu 18.04 LTS,先安装一下GMP库的依赖:sudo apt-get install.https://blog.csdn.net/fenghaoyiqing/article/details/119380183

安装gdb


yum install -y texinfo
wget http://ftp.gnu.org/gnu/gdb/gdb-11.1.tar.xz
tar -zxvf gdb-11.1.tar.gz
cd gdb-11.1
./configure
make
make install
#建立环境变量链接,注意不一定是/usr/local/bin目录,要看看到底是哪个目录
ln -s /usr/local/bin/gdb /usr/bin/gdb

8、关于Linux添加环境变量的方法

1、暂时的添加环境变量PATH

       [可用已试]  可通过export命令,如

export PATH=/usr/local/nginx/sbin/:$PATH
将/usr/local/nginx/sbin/目录临时添加到环境变量中

2、为当前用户永久添加环境变量:

编辑 .bashrc 文件 vim ~/.bashrc

文件末尾添加:export PATH="/usr/local/nginx/sbin/:$PATH"

source ~/.bashrc

3、[可用已试] 为所有用户永久添加某一环境变量:


编辑 /etc/profile 文件 vim /etc/profile

文件末尾添加:export PATH="/usr/local/nginx/sbin/:$PATH"

source  /etc/profile

4、/etc/environment 下面添加,


打开 `/etc/environment`  ,在最后添加,运行下面2条命令。

     sudo vi /etc/environment 

      source /etc/environment 

https://www.csdn.net/tags/MtzaEg2sODQ5MjItYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/MtzaEg2sODQ5MjItYmxvZwO0O0OO0O0O.html

 三、Centos7 [安装\升级]  其他软件

1、Centos7 [安装\升级]  Python3.6.9

1、注意:不要卸载系统自带的python2.7,这会导致系统部分功能无法使用。

2、下载python3.6.9

wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz

3、解压

tar -xzvf Python-3.6.9.tgz

4、创建安装目录并编译

cd Python-3.6.9
mkdir /usr/local/python3.6.9
./configure --prefix=/usr/local/python3.6.9
#后面参数是指定安装目录为/usr/local/python3.6.9

5、安装

make && make install

6、创建软连接

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第7张图片

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第8张图片

#首先注意/usr/local/python3.6.9是刚刚指定安装的目录名
#查看关于python3或python的软链接(在/usr/bin/目录下ll命令),根据实际情况建立软连接(快捷方式)
#通过观察如上图,我先把原来指向删除了
rm -rf python3
rm -rf python

ln -s /usr/local/python3.6.9/bin/python3 /usr/bin/python3
ln -s /usr/bin/python3 /usr/bin/python

#查看是否指向正确(在/usr/bin/目录下输入ll命令)
#查看关于pip的软链接,根据实际情况建立软连接(快捷方式)
#我把原有pip3删了或重命名pip3-,然后pip3=>/usr/local/python3.6.9/bin/pip3
#把原有pip重命名为pip-,然后pip=>/usr/local/python3.6.9/bin/pip3

ln -s /usr/local/python3.6.9/bin/pip3 /usr/bin/pip3
ln -s /usr/bin/pip3 /usr/bin/pip

7.验证是否成功

python -V
python3 -V
pip -V
pip3 -V

正常的电脑系统到这里一般会成功,不正常的我也没办法

输入pip -V 提示 Segmentation fault

CMake导入第三方库 及 新Centos7环境配置 2022.7.1记_第9张图片

偶然看见下面命令,执行后,安装成功  [仅供参考,提供思路]

python -m pip install --upgrade --force pip
pip -V

2、Centos7 [安装\升级]  Python Virtualenv

1、virtualenv更多的还是适用于本地开发不同的项目,但是在生产环境中还是使用docker给不同的项目创建不同的容器,各自分开运行为好,不宜放在一个单独的物理机中运行

2、安装virtualenv,记住安装目录,软链接时要用

pip install virtualenv

3、软链接

ln -s /usr/local/python3.6.9/bin/virtualenv /usr/bin/virtualenv
#我的是安装在了/usr/local/python3.6.9/bin/目录下
#因为我的python默认是/usr/local/python3.6.9/bin/见上文,所以自动安装在此了

4、创建干净的虚拟环境(默认)

virtualenv venv

指定python版本,默认使用的是当前系统安装(/usr/bin/python)的python解释器

# python2的环境
virtualenv -p /usr/bin/python2 venv

# python3的环境 
virtualenv -p /usr/bin/python3 venv

5、激活虚拟环境

source venv/bin/activate

6、退出虚拟环境

deactivate

7、删除虚拟环境,删除venv文件夹即可

rm -rf venv

8、生成requirements.txt依赖包

pip freeze > requirements.txt

9、安装requirements.txt依赖包

pip install -r requirements.txt

10、虚拟环境复制迁移

        10.1拷贝 venv 虚拟环境文件夹

# 如果是服务器中
# 1. 压缩文件
tar -zcvf venv.tar.gz ./venv

# 2. 解压文件
tar -zxvf xxx.tar.gz

2、修改 venv/bin/activate 文件中的参数:

VIRTUAL_ENV="/home/venv"

将 VIRTUAL_ENV 路径改为当前 venv文件夹的路径

3、激活虚拟环境

source ./venv/bin/activate

[优]参考文章:

virtualenv教程_花花少年的博客-CSDN博客_virtualenv 使用一、参考资料virtualenvvirtualenv简单使用virtualenv的介绍及基本使用(所有命令解释)二、相关介绍irtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,便于不同的项目在同一台机器上开发运行,不同项目之间相互不干扰,即在一台机器上创建多个独立的python运行环境。如下所示:使用 VirtualEnv 的理由:隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。为部署应用提供方便,把开发环https://blog.csdn.net/m0_37605642/article/details/120839557

四、 [优质]   学习资源

[优]CMake学习:

GitHub - SFUMECJF/cmake-examples-Chinese: 快速入门CMake,通过例程学习语法。在线阅读地址:https://sfumecjf.github.io/cmake-examples-Chinese/快速入门CMake,通过例程学习语法。在线阅读地址:https://sfumecjf.github.io/cmake-examples-Chinese/ - GitHub - SFUMECJF/cmake-examples-Chinese: 快速入门CMake,通过例程学习语法。在线阅读地址:https://sfumecjf.github.io/cmake-examples-Chinese/https://github.com/SFUMECJF/cmake-examples-Chinese

[优]libhv库:

GitHub - ithewei/libhv: 比libevent、libuv更易用的网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket/MQTT client/server. 比libevent、libuv更易用的网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket/MQTT client/server. - GitHub - ithewei/libhv: 比libevent、libuv更易用的网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket/MQTT client/server.https://github.com/ithewei/libhvlibhv: 比libevent、libuv更易用的国产网络库,用来开发 TCP/UDP/SSL/HTTP/WebSocket/MQTT 客户端/服务端https://gitee.com/libhv/libhv

[优]C/C++ [框架/库] :

全网唯一值得推荐的C/C++框架和库 - 知乎关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库 C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是…https://zhuanlan.zhihu.com/p/492392194

Cmake简单的学习:

Linux下CMake教程总结_追光少年羽的博客-CSDN博客_cmake linuxCMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。本文主要讲述在Linux下如何使用CMake来编译我们的程序。一 安装CMake本文使用ubuntu18.04,安装cmake使用如下命令,sudo apt install cmake安装完成后,在终端下输入cmake -version查看cmake版本,这样chttps://blog.csdn.net/a15608445683/article/details/122955835

其它 C/C++ [框架/库] :

你工作中最推荐的 C/C++ 程序库有哪些,为什么? - 知乎知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制以及结构化和易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类、在诸多领域具有关键影响力的知识分享社区和创作者聚集的原创内容平台,建立起了以社区驱动的内容变现商业模式。https://www.zhihu.com/question/51134387

你可能感兴趣的:(linux,c++,python,virtualenv,vim)