告知和自己一样的初学者!强调一下Linux版本选择的重要性,自己学习Linux初衷就是在Linux编译C++项目。Linux版本众多,结果选择了Red Hat,导致期间遇到各种各样的问题,也怪自己菜,结果折腾了两天,都没有在这个版本上将Qt跑起来,期间遇到各种问题就不在此枚举了。推荐Ubuntu,结果从下载系统到安装配置Qt整个过程一点问题都没有出现,一路流畅下来全部搞定。这里提醒初学者,要想方便上手就先上Ubuntu,反正都是虚拟机,实在不行卸载重新安装其他版本都行。
这篇博文依然保留Red Hat版本的Linux内容,就不在编辑了。
Linux版本以及安装完全参考《Linux就该这么学》书中第一章中方法(特详细),书中有VM及RedHat 8等镜像文件。
在RPM(红帽软件包管理器)公布之前,要想在Linux系统中安装软件,只能采取编译源码包的方式。所以,早期安装软件是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供自身的源代码,还需要运维人员编译代码后自行解决软件之间的依赖关系。因此要安装好一个服务程序,运维人员不仅需要具备丰富的知识、高超的技能,还要有良好的耐心。
总而言之,早期的Linux系统在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、卸载、查询、升级等软件操作时难度都非常大。RPM机制则正是为了解决这些问题而设计的。
RPM有点像Windows系统中的控制面板,会建立统一的数据库,详细记录软件信息并能够自动分析依赖关系。表1-1所示为一些常用的RPM软件包命令,此时还不需要记住它们,大致混个“脸熟”就足够了。
表 常用的RPM软件包命令
命令 | 作用 |
---|---|
rpm -ivh filename.rpm | 安装软件 |
rpm -Uvh filename.rpm | 升级软件 |
rpm -e filename.rpm | 卸载软件 |
rpm -qpi filename.rpm | 查询软件描述信息 |
rpm -qpl filename.rpm | 列出软件文件信息 |
rpm -qf filename | 查询文件属于哪个RPM |
但是,尽管RPM能够帮助用户查询软件之间的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件依然很繁琐。Yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
Yum软件仓库中的RPM软件包可以是由红帽官方发布的,也可以是由第三方发布的,当然也可以是自己编写的。
命令 | 作用 |
---|---|
yum repolist all | 列出所有仓库 |
yum list all | 列出仓库中所有软件包 |
yum info 软件包名称 | 查看软件包信息 |
yum install 软件包名称 | 安装软件包 |
yum reinstall 软件包名称 | 重新安装软件包 |
yum update 软件包名称 | 升级软件包 |
yum remove 软件包名称 | 移除软件包 |
yum clean all | 清除所有仓库缓存 |
yum check-update | 检查可更新的软件包 |
yum grouplist | 查看系统中已经安装的软件包组 |
yum groupinstall 软件包组 | 安装指定的软件包组 |
yum groupremove 软件包组 | 移除指定的软件包组 |
yum groupinfo 软件包组 | 查询指定的软件包组信息 |
在使用Linux的过程中可能会遇到很多问题,在网上寻找答案的时候,需要提前了解一下Linux系统分为两种:
1.RedHat系列:Redhat、Centos、Fedora等
2.Debian系列:Debian、Ubuntu等
其中也会有一些命令上的差异,例如:
RedHat系列的包管理工具是yum
Debian系列的包管理工具是apt-get
Linux下的C++开发就是:编辑、编译、连接全部在 Linux下完成。通常有两种方式,(1)一种是编辑、编译、调试分开(称为命令开发方式);(2)另一种是编辑、编译、调试在一个集成开发环境中完成,称为集成开发方式。
在命令开发方式下,编辑源代码的工具可以使用图形界面下的编辑器gedit或字符界面下的编辑器vi/vim。编辑完毕后保存,然后在命令行下使用命令 gcc/g++编译程序,如果需要调用,可以使用gdb命令。这两种方式稍显啰唆,尤其是调试,只能在命令行下用gdb进行调试,效率不是很高,但这是Linux开发人员的基本功。
集成开发方式就是在图形界面的Linux下使用C++集成开发环境,比如Eclipse CDT。这种方式比较方便,比如可以用鼠标把工程管理、编辑、编译和调试工作都在一个集成开发环境下完成。这种开发方式效率较高,但不是每个企业都会提供Linux图形界面。
Linux Redhat 8系统默认wifi是关闭的,需要在系统桌面右上角打开才可以连接网络。
查看Linux系统版本
cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
yum install gcc gcc-c++
gcc与g++的区别
gcc可以用来编译C或者C++,但他只能编译c++源文件,不能自动和C++程序使用的库连接,g++可以实现C++程序的编译和链接,其实他也是调用gcc来编译的,要编译c++代码生成可执行文件要用 g++
1)安装包下载及(安装教程1:Redhat 7.1 离线安装 gcc),(安装教程2:RedHat 安装 gcc、g++)
gcc安装包下载:https://pan.baidu.com/s/1JWh32h1hbnO87ADcDThl9g 密码:avf0
2)Windows与Linux共享文件
离线安装需要首先解决把在Windows下载的离线文件发送到Linux系统中,如果是Linux下载的就不需要这个步骤了,直接看下面的步骤3)。
方法可以通过VM建立Windows与Linux共享文件的方式进行,参考博文:如何将Windows系统上的文件传入VMware中的Linux虚拟机中。还可以通过网络的方式传输文件,参考博文:将文件从本机上传到虚拟机中Linux系统中的几种方法。
共享文件夹的方式: 打开虚拟机设置,选择共享文件夹,添加,新建一个文件夹设置主机路径。以后这个文件夹中的内容就会被Linux虚拟机直接使用。
在虚拟机中通过命令查看刚才的共享文件
/mnt/hgfs/Vmware_Share
结果显示
bash: /mnt/hgfs/Vmware_Share: Is a directory
将当前执行目录修改为刚才新建的共享文件夹,在这个文件中放入我们下载的gcc_rpm.tar.gz文件。
cd /mnt/hgfs/Vmware_Share
上述命令无法查看到共享可以查看博文:vm虚拟机无法访问共享文件夹中的解决方案一。
无法访问一般是挂载点没设置好,优先选择这种
①将主机share目录下所有文件挂载到hgfs内。
sudo vmhgfs-fuse .host:/share /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other
host:/后面跟着共享文件夹名字,/mnt/hgfs 即为要挂载到Ubuntu 的目录。
②然后重启终端
exit
3)解压这个文件
tar zxvf gcc_rpm.tar.gz
之后就可以看到解压后的rpm文件
4)安装,先将当前目录设置为gcc_rpm
cd gcc_rpm
次执行如下命令,依次执行时候,我这里会显示出错。因此,我采用的是批量安装的方式。
rpm -ivh lib64gmp3-4.3.1-1mdv2010.0.x86_64.rpm
rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
rpm -ivh cpp-4.4.7-4.el6.x86_64.rpm --force
rpm -ivh kernel-headers-2.6.32-431.el6.x86_64.rpm
rpm -ivh glibc-headers-2.12-1.132.el6.x86_64.rpm --nodeps --force
rpm -ivh glibc-devel-2.12-1.132.el6.x86_64.rpm --force --nodeps
rpm -ivh gcc-4.4.7-4.el6.x86_64.rpm --force --nodeps
rpm -ivh libstdc++-devel-4.4.7-4.el6.x86_64.rpm --force --nodeps
rpm -ivh gcc-c++-4.4.7-4.el6.x86_64.rpm --force --nodeps
批量安装方法:
rpm -ivh *.rpm --nodeps --force
5)测试安装是否成功,查看版本
gcc -v
结果显示
gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
在桌面文件夹上右击,在快捷菜单上选择“在终端中打开”,接着在命令提示符下输入gedit。
在gedit中输入如下代码:
#include
using namespace std;
int main()
{
cout<<"Hello, World!"<<endl;
return 1;
}
然后保存为helloworld.cpp,下面准备编译。
(3)开始编译链接。返回到终端窗口,进入 helloworld.cpp所在目录,然后输入命令进行编译链接:
g++ -o helloworld helloworld.cpp
g++是前面安装的C++程序的编译工具,-o是输出生成的二进制程序的意思,其后紧跟着的是二进制程序名。
执行编译的程序,显示结果
[root@linuxprobe Desktop]# ./helloworld
Hello, World!
见下篇博文Linux使用集成开发方式编译C++程序—笔记2。