在本篇文章中,筆者會談談如何搭建C++的運行環境。在不同操作系統中,運行C++編譯器的命令也各不相同,最常用的編譯器是GNU編譯器(Linux系統)和微軟Visual Studio編譯器(Windows系統)。
注意C++是沒有版本的說法的,只有編譯C++的編譯器才有版本這一說。C++常用的標准的是“C++11”和"C++98",其中“C++11”是目前最新的標准。如果是Linux系統,GCC的版本至少都應該是4.7才能支持c++11標准,而且4.7還未完全支持C++11標准的所有特性,只支持了C++11標准的部分特性,傳送門。但是Windows系統中的至少是Visual Studio 2015才支持"C++11"標准。
Windows7 搭建運行環境
C++與C#不同,Windows中很多類庫都是由C#寫的,幾乎所有的Windows操作系統默認都已經安裝了.NET Framework了,可以直接使用C#的環境。但C++不同,需要先下載微軟的Visual Studio,安裝過程一路Next。這里筆者就不介紹如何使用它的圖形界面了,本文介紹通過命令行工具來編譯C++程序。visual studio有許多版本,但從visual studio 2012才開始部分支持c++11的特性,關於visual studio 各個版本與c++標准支持的對照表,傳送門。
筆者的Visua Studio目錄為:C:\Program Files (x86)\Microsoft Visual Studio 11.0
配置環境變量:
添加VS_HOME
C:\Program Files (x86)\Microsoft Visual Studio 11.0
添加LIB
%VS_HOME%\vc\lib
添加INCLUDE
%VS_HOME%\vc\include
Path環境變量追加:
%VS_HOME%\vc\bin
接下來測試一下:cl /?
然后編寫一個Hello.cpp文件,內容如下:
//引入iostream #include <iostream> int main(){ //提示用戶輸入 std::cout << "Enter two numbers:" << std::endl; int v1 = 0, v2 = 0; //接收兩個數字,中間以空格隔開 std::cin >> v1 >> v2; //輸出兩個數的和 std::cout << "The sum of num " << v1 << " and " << v2 << " is " << (v1+v2) << std::endl; return 0; }
運行cl /EHsc Hello.cpp,會得到Hello.exe文件。其中/EHsc表示啟用C++的異常處理,與/GX[-]相同。
讀者可能會遇到如下錯誤:
1.出現vc編譯,丟失mspdb110.DLL解決
這是因為%VS_HOME%\VC\bin\下沒有mspdb110.dll“這個文件,直接從%VS_HOME%\Common7\IDE\下復制這個文件到%VS_HOME%\VC\bin\下即可解決。
2.無法打開文件“kernel32.lib”或缺少 “uuid.lib”
這是%VS_HOME%\VC\lib下沒有這兩個文件,在不同的計算機中這兩個文件的位置也不一定是固定的。讀者可以在C盤下搜索Kernal32.lib和uuid.lib,然后將它們拷貝到%VS_HOME%\VC\lib目錄下。
Linux 下搭建運行環境
筆者的Linux是:CentOS-7.4-x64版本。
在上面我們介紹了如何在Windows下搭建和運行C++程序,在接下來的章節中,筆者將會探討如何在Linux下搭建C++語言環境。
在開始搭建環境之前,需要先了解GCC的概念。GCC的全稱是GNU Compiler Collection(GNU編譯器集合),通過GNU編譯器能夠編譯不同類型的語言。
gcc:GNU C Compiler
g++:GNU C++ Compiler
gcc編譯.c或.cpp結尾的文件,但是gcc是分開編譯C和C++的。g++也可以編譯.c或.cpp文件,但這些文件都被作為C++進行編譯。
也就是說,g++編譯文件的時候,默認是會引入標准庫(std)文件的,但是gcc不會。
1.安裝GNU c/c++編譯器
檢查gcc和g++是否安裝
gcc --version
g++ --version
如果未安裝,可以按照如下的提示進行一步步進行安裝。
如果是Centos6系統:
# yum groupinstall 'Development Tools'
CentOs7系統,可能會找不到“Development Tools”包,可以用如下的命令:
# yum -y install gcc-c++
如果是Debian 或 Ubuntu 系統
$ sudo apt-get update
$ sudo apt-get install build-essential manpages-dev
2.驗證
在Linux系統中,輸入如下命令會顯示GCC的安裝位置和版本信息
$ whereis gcc
$ which gcc
$ gcc --version
如果是要使用C++11的特性,那么應該將GCC的版本升級到4.7以上,建議5.4的版本。
下面筆者介紹如何在CentOS7下,將GCC4.8升級到GCC5.4版本,可以參考如下腳本
echo "Downloading gcc source files..."
curl https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2 -O
echo "extracting files..."
tar xvfj gcc-5.4.0.tar.bz2
echo "Installing dependencies..."
yum install gmp-devel mpfr-devel libmpc-devel -y
echo "Configure and install..."
mkdir gcc-5.4.0-build
cd gcc-5.4.0-build
../gcc-5.4.0/configure --enable-languages=c,c++ --disable-multilib
make -j$(nproc) && make install
參考地址為:https://gist.github.com/jdhao/e3fd77d51f3a95684d2b3354fc61b2ab
3.在Linux系統上編譯和運行C/C++項目
接下來筆者寫些C和C++的案例文件,並且在Linux系統編譯和運行起來。
demo.c
#include<stdio.h> /* demo.c: My first C program on a Linux */ int main(void) { printf("Hello! This is a test prgoram.\n"); return 0; }
編譯命令可以用cc、gcc、make:
cc demo.c -o demo
或
gcc demo.c -o demo
或
make demo
注意:在使用make編譯的時候,不用指定源文件,只需要制定源文件去掉后綴后的新的文件,就可以了。例如上面的demo.c,只要使用make demo, make就會根據規則,將demo.c編譯為demo。
執行上面三個命令的任何一個,都可以生成一個名為demo的可運行文件。
然后使用
./demo
就可以運行了。
效果圖:
接下來我們來編譯和運行一下C++程序。
還是以上面的Hello.cpp(這里不再重復貼出代碼,就是第一節中“Windows7 搭建運行環境”下的案例)為例,我們可以如下編譯
g++ Hello.cpp -o Hello
或者
make Hello
注意這里不能使用 gcc Hello.cpp -o Hello 來編譯(如果使用該命令編譯,那么報出“找不到標准庫”的錯誤),因為gcc命令默認是編譯C語言文件的,未引入標准庫。
然后運行就可以了
./Hello
如果使用了g++11的特性的話,那么應該指明使用g++11標准進行編譯:
g++ Hello.cpp -o Hello -std=c++11
如果make使用的時候,出現target is up to date錯誤信息,那么可以加上-B 選項,例如:
make -B Hello
參考文檔: