C++linux高并发服务器项目实践 day1

C++linux高并发服务器项目实践 day1

  • 准备环境
    • 第一段代码
    • GCC工作流程
    • gcc和g++的区别
      • 误区一,gcc只能跑c,g++只能跑c++
      • 误区二,gcc不会定义__cplusplus宏,而g++会
      • 误区三,编译只能用gcc,链接只能用g++
  • 上传文件

准备环境

用到软件:xshell、vscode、vm、ubentu

在vm中使用iso文件安装ubentu,基本上一路都是傻瓜操作,就不细讲

使用下述代码,即可使虚拟机系统和主机使用ssh交互

sudo apt install openssh-server

使用下述代码,即可使用ifconfig命令查看ip地址

sudo apt install net-tools

正常情况下使用下述代码可以实现一些基本操作

ls 查看当前目录下的文件夹
ll 查看当前目录下的详细内容
pwd 查看当前目录

xshell 在之前玩mc服务器时已经玩过了,这里就不多赘述

vscode在第一次下载完启动后,点击extensions添加扩展
输入Chinese查找中文插件并下载
输入remote查找remote development下载链接服务器的插件
输入c查找c/c++的插件并下载

在remote development 安装完成后,左边工作栏会多出一个远程资源管理器,在里面选择远程,里面选择SSH,点击设置,选择第一个.ssh\config,修改他的属性,主机名和ip地址改为ubentu相应内容,然后保存,刷新后就可以连接我们的虚拟机了

在xshell中使用 mkdir 命令在根目录下新建一个linux文件夹,在vscode中的远程资源管理器中可以查看并连接,这就算是验证了两个软件都已经连接上了虚拟机的linux服务器

在linux文件夹下,新建test.c文件,并输入c语言基础框架试一下是否能正常运行

这里我报错了,报的是查找不到头文件,解决方法是在虚拟机中安装g++环境

sudo apt install g++
sudo apt install gcc
gcc/g++ -v/–version

g++版本要大于4.8.5
使用ctrl + L 即可清空虚拟机的命令行界面

第一段代码

使用下列代码,即可在虚拟机中编辑test.c文件,前者安装vim插件,后者使用vim访问该文件

sudo apt install vim
vim test.c

但vim编辑相当不方便,可以使用下列代码,回到刚才的界面

:q

使用下列代码返回上级目录

cd …

在vscode中编译test.c文件,输入正常的C的hello world代码
在虚拟机中 ,使用下列代码,即可在虚拟机环境中编译test.c文件

gcc test.c -o app

上述代码的意思是,用gcc编译test.c文件,-o表示生成后续名称的文件
若使用ls查看当下目录的文件,可以发现生成了一个叫app的文件
需要注意的是:这里的代码必须在vscode中保存了才能运行,保存的快捷键为ctrl + S

这里使用下述代码,可以输出我们想要的hello world

./app

若不加-o 则会生成一个a.out这样一个文件,输出结果一致

gcc test.c
./a.out

GCC工作流程

源代码 —预处理器–》预处理后源代码—编译器—》汇编代码—汇编器–》启动代码,目标代码,库代码,其他目标代码-----连接器 -----》可执行文件

源代码 .h .c .cpp
预处理后源代码 .i
汇编代码 .s
目标代码 .o
可执行程序 .exe .out

从上述流程,我们可以使用以下代码,来输出一个预处理后源代码,生成的文件可以在vscode上查看

gcc test.c -E -o test.i

-E代表预处理 ,-o表示输出的文件名
同理

gcc test.i -S -o test.s
gcc test.s -C -o test.o

可以使用下述代码,删除该目录下对应名称的文件

rm test.c

且可以用g++来编译c语言的程序

其他GCC常用参数选项

-I directory 指定include 包含文件的搜索目录
-g 在编译的时候,生成调试信息,该程序可以被调试器调试
-D 在程序编译的时候,指定一个宏
-w 不生成任何警告信息
-o [file1] [file2] 效果等同于上面的代码
-Wall 生成所有警告信息
-On n的取值范围:0~3.编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-l 在程序编译时,指定使用的库
-L 指定编译的时候,搜索的库的路径
-fPIC/fpic 生成与位置无关的代码
-shared 生成共享目标文件,通常用在建立共享库时
-std 指定c方言,如-std=c99 ,gcc默认的方言是GNU C

gcc和g++的区别

误区一,gcc只能跑c,g++只能跑c++

  • 后缀为.c的,gcc把它当做是c程序 ,而g++当做是c++程序
  • 后缀为.cpp的,两者都会认为是c++程序,c++的语法规则更加严谨一点
  • 编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和c++程序使用的库连接,所以通常用g++来完成连接,为了统一起见,干脆都用g++

误区二,gcc不会定义__cplusplus宏,而g++会

  • 实际上,这个宏只是标志着编译器将会吧代码按c还是c++语法来解释
  • 如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义

误区三,编译只能用gcc,链接只能用g++

  • 严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++
  • gcc命令不能自动和c++程序使用的库链接,所以通常使用g++来完成连接。但在编译阶段,g++会自动调用gcc,二者等价

上传文件

需要用到FTP软件,依然是之前玩mc云服务器的经验,我可以用FlashFXP来上传
由于vscode已经更新的相当强大了,也可以直接利用VSCODE来上传,暂时不知道有没有啥限制

你可能感兴趣的:(linux,服务器,c++)