环境配置
1.安装gcc
yum install gcc
// 询问是否,按y键回车即可,或者
yum -y install gcc
2.安装g++
yum install gcc-c++
或者
yum -y install gcc-c++
安装完毕使用g++ -v
和gcc -v
查询
另外,在离线状态下,需要用rpm包的方式安装,为了方便我这里将rpm一起打成了包,执行install.sh即可安装,只在CenOS 7.2下测试正常
g++安装包点击下载 注意:安装g++前应首先安装好gcc
y
使用 VS 2019 编写和调试 Linux C/C++程序
首先在安装时我们需要选择 “使用 C++ 的 Linux 开发”
[外链图片转存失败(img-cA3dgHX0-1567329530407)(C++开发环境配置.assets/20190405150513335.png)]
环境要求
- VS 2019
- 安装了gcc、g++版本在4.8以上的Linux主机
接下来讲解一下使用 VS2019 进行Linux程序的编写和调试。
首先我们创建一个Linux控制台程序
创建新项目
开启VS2019后,点击 “创建新项目”
[外链图片转存失败(img-YH2egrA1-1567329530429)(C++开发环境配置.assets/20190405155609824.png)]
选择语言"c++"
选择平台"Linux"
[外链图片转存失败(img-rt2Fzuzr-1567329530433)(C++开发环境配置.assets/2019040515581066.png)]
我们可以选择空项目或者是生成默认控制台hello程序,这里我们选择"空项目":
[外链图片转存失败(img-RAPootzP-1567329530438)(C++开发环境配置.assets/20190405155913568.png)]
然后输入项目名称进行创建:
[外链图片转存失败(img-5AhS8icr-1567329530447)(C++开发环境配置.assets/20190405163741589.png)]
配置连接器
首次使用VS编写Linux程序时,我们需要配置连接器:点击 工具 - 选项
[外链图片转存失败(img-aDdtpJ5P-1567329530451)(C++开发环境配置.assets/20190405160238136.png)]
点击 跨平台 - 连接管理器 - 添加
[外链图片转存失败(img-HElRjgYs-1567329530461)(C++开发环境配置.assets/2019040516032526.png)]
然后我们输入 Linux 主机 ip、用户名、密码等信息进行连接:
[外链图片转存失败(img-9osCTxI5-1567329530466)(C++开发环境配置.assets/20190405160421877.png)]
Linux安装远程调试
注意:此时Linux主机必须安装远程调试的服务
ubuntu下安装如下:
[外链图片转存失败(img-NJEJyd74-1567329530469)(C++开发环境配置.assets/20190405172522820.png)]
安装完成后,即可连接成功。注意,只要linux主机开启SSH服务即可,只要XShell能通过22号端口连接到linux主机都可连接成功。
[外链图片转存失败(img-IAjFicXU-1567329530475)(C++开发环境配置.assets/20190405160558306.png)]
编写并调试Linux程序
右击项目,添加新建项 - 添加 C++ 源文件
[外链图片转存失败(img-SDsrlJZC-1567329530477)(C++开发环境配置.assets/20190405160747441.png)]
接下来我们编写一个普通程序并进行生成:
[外链图片转存失败(img-DuNATyhb-1567329530483)(C++开发环境配置.assets/20190405173340191.png)]
接下来我们设置断点,即可开始调试程序,**右侧为Linux的控制台窗口,即为程序输出:
[外链图片转存失败(img-yE5Yzemo-1567329530487)(C++开发环境配置.assets/20190405173615916.png)]
如果编译提示unrecognized command line option “-std=c++11” 说明gcc版本过低,需要升级,参考下面的CentOS6通过yum升级gcc/g++至版本4.8.2
编写Linux多线程程序
/**
* 由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a, 所以在使用pthread_create创建线程时,在编译中要加 - lpthread参数:
* g++ -o main -lpthread main.c
*/
#include <iostream>
#include <pthread.h>
using namespace std;
#define NUM_THREADS 5
// 线程的运行函数
void* say_hello(void* args)
{
cout << "Hello Runoob!" << endl;
return 0;
}
int main()
{
// 定义线程的 id 变量,多个变量使用数组
pthread_t tids[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; ++i)
{
//参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数
int ret = pthread_create(&tids[i], NULL, say_hello, NULL);
if (ret != 0)
{
cout << "pthread_create error: error_code=" << ret << endl;
}
}
//等各个线程退出后,进程才结束,否则进程强制结束了,线程可能还没反应过来;
pthread_exit(NULL);
}
接下来我们编写一个多线程程序,编写完成后发现编译错误:
[外链图片转存失败(img-H5PxzPjE-1567329530489)(C++开发环境配置.assets/20190405165401879.png)]
我们在linux下编译此程序时都要加上静态库 -lpthread,那么对于在linux下编译过程中如果需要用到的静态库的程序,在VS中我们就要在项目属性中:链接器->常规->附加库目录中添加对应的库路径(写Linux环境下的绝对路径),在链接器->输入->库依赖项里面写上需要的库名称,去掉名称里面的lib和扩展名.a。例如:libpthread.a就是pthread。
接下来我们去Ubuntu下查找线程静态库所在位置:
[外链图片转存失败(img-EjBxiCoB-1567329530493)(C++开发环境配置.assets/2019040517004446.png)]
以下为CentOS7 路径
/usr/lib64/libpthread.a
/usr/lib64/libpthread_nonshared.a
注意,不同系统中的路径不一定相同
接下来我们在项目中 右击 - 属性,在链接器->常规->附加库目录中添加对应的库路径(绝对路径):
[外链图片转存失败(img-0mZOB3rQ-1567329530497)(C++开发环境配置.assets/20190405171028316.png)]
然后在链接器->输入->库依赖项里面写上需要的库名称:
pthread 和 pthread_nonshared
[外链图片转存失败(img-wWfo6A7I-1567329530500)(C++开发环境配置.assets/20190405171055579.png)]
接下来我们重新生成解决方案,则可成功通过。
[外链图片转存失败(img-8GmCs2Uj-1567329530502)(C++开发环境配置.assets/20190405171129885.png)]
接下来我们设置断点,即可开始调试程序,**右侧为Linux的控制台窗口,即为程序输出:
[外链图片转存失败(img-PmYYOtx4-1567329530505)(C++开发环境配置.assets/20190405171217490.png)]
CentOS6通过yum升级gcc/g++至版本4.8.2
1.安装仓库等
wget http://people.centos.org/tru/devtools-2/devtools-2.repo
mv devtools-2.repo /etc/yum.repos.d
yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
2.为新版本的gcc创建软连接
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
3.检查:确认已经升级到4.8.2版本。
gcc -v
添加头文件
vs:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\VC\Linux\include\usr\include
linux:/usr/include