C++linux高并发服务器项目实践 day1
准备环境
用到软件: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来上传,暂时不知道有没有啥限制