1. 程式人生 > >Linux下離線手動下載安裝C++開發環境

Linux下離線手動下載安裝C++開發環境

1.前言

本人使用的作業系統是Fedora24。

1.1線上安裝軟體的方法

Linux下我們習慣了使用軟體包管理器來安裝我們需要的軟體,比如Red Hat公司的Fedora、RHEL(Red Hat Enterprise Linux)和後來加入紅帽的CentOS,使用rpm和yum來安裝軟體,Ubuntu使用apt-get來安裝。 使用軟體包管理器確實很方便,在聯網的環境下,從下載到安裝,以及自動關聯軟體的依賴項,並且一次安裝所有依賴的軟體包,為我們省去了很多繁瑣的操作。這樣確實很好,但是我們卻失去了瞭解軟體有哪些組成模組和依賴項的機會。下面我就要折騰一下,手動下載安裝C++環境,擺託yum install gcc-c++

這種傻瓜式操作。手動下載安裝還有一個好處就是為不能聯網的機器安裝軟體。有時候,確實要這樣做。

1.2GNU、GNU/Linux、GCC、gcc和g++的概念與區別

正式開始本文前,先交代幾個東西的概念,以及它們之間的聯絡,還有大家(包括me)可能存在的疑問。

GNU是什麼?
GNU是由大名鼎鼎的自由軟體之父Richard Stallman在1983年9月27日公開發起的一項計劃,又稱革努計劃。GNU計劃的目標是建立一套完全自由的作業系統。GNU是“GNU is Not Unix”的遞迴縮寫,當然,我們可以把GNU理解成推動革奴計劃的組織,一個自由軟體組織。

GNU計劃已經開發出了許多開源免費的工具軟體供我們這些小白程式設計師使用,我所知道的就有C編譯器gcc(GNU C Compiler),C++編譯器g++(GNU C++ Compiler),CC++偵錯程式gdb(GNU Debugger),文字編輯器Emacs,專案構建工具gnu make,系統shell bash(GNU shell)等等。最初的Linux核心也是以GNU通用公共許可證(GNU General Public License,GPL)釋出的!

GNU是作業系統嗎?
上面已經說了,GNU是一項致力於建立一套完全自由的作業系統的一項計劃,因此GNU顯然不是作業系統!

至於GNU有沒有自己的作業系統,我不太清楚,但聽說有個Hurd,但是沒有流行起來啊!據說GNU自己的系統核心Hurd還在研發中。 不要把Linux當做GNU的一部分,Linux不是GNU組織開發的,Linux只是以GNU的開源協議GPL來發布的。 嚴格來說Linux不是一個完整的作業系統,只是一個系統核心。比如Linux發行版Debian使用linux核心就稱為Debian/linux,用hurd核心就稱為Debian/hurd。如果Hurd推出正式版的話,GNU/Hurd就是一個真正的完整的完全自由的作業系統。

有人也許還會問GNU/Linux是什麼,這裡說明一下,GNU 的系統核心Hurd尚未完成,所以 GNU 使用 Linux 作為其核心。GNU 和 Linux 以這樣的方式組合成為 GNU/Linux 作業系統,所以 GNU/Linux是GNU以Linux作為核心而釋出的一個作業系統。如果你的系統是GNU/Linux的話,使用uname -o 或者uname --operating-system 命令就可以檢視系統的名稱,我的就是GNU/Linux,如下圖:

這裡寫圖片描述

GCC是什麼?
GCC很容易和下面講到的C語言編譯器gcc弄混淆,也請大家注意。GCC(GNU Compiler Collection)是GNU編譯器套件,包括C、C++、Objective-C、Fortran、Java、Ada和Go語言等的編譯器,當然也包括了這些語言的庫(如libstdc++、libgcj等等)。而gcc是GCC的一部分,即C語言編譯器!

gcc是什麼?
gcc不是GCC,請大家注意。gcc(GNU C Compiler)是GNU開發的C語言編譯器。是GCC的一部分。

gcc是不能用來編譯C++程式碼的,也請大家注意!

g++是什麼?
g++(GNU C++ Compiler)是GNU開發的C++編譯器,也是GCC的一部分。因為C++是C語言的擴充,很顯然,g++是可以編譯C語言的。

gcc能編譯C++程式碼嗎?
看了上面的說明,弄清楚gcc是什麼,你就知道gcc是不能編譯C++程式碼的!

2.Linux下離線安裝C++開發環境

安裝C++開發環境需要安裝兩部分,第一部分是C++庫,第二部分就是C++編譯器g++。離線安裝C++開發環境,首先你得有原始碼或者對應的rpm或者deb軟體包。有兩種方法,第一種是編譯GCC原始碼安裝,第二種就是下載系統的軟體包並安裝。

第一種方法是下載編譯安裝GCC原始碼,需要下載各種依賴庫,而且還需要系統中提前存在g++,我在嘗試的過程中,在編譯依賴庫的時候,提示說未檢測到g++。我編譯GCC就是為了安裝g++,現在提示我說沒有g++,這不造成死迴圈了嗎?所以無法繼續下去,對於已經有g++的系統需要升級g++版本的話,可以參考下面的GCC的編譯安裝。

第二種方法是下載不同系列的Linux系統對應的g++編譯好的二進位制軟體包進行安裝。比如Red Hat系列的Fedora、CentOS和RHEL使用的rmp包,Ubuntu使用的deb包。本文就在Fedora24的環境下,下載軟體包來安裝C++開發環境。

2.1方法一:編譯安裝GCC

2.1.1第一步:下載GCC與依賴庫

本文使用GNU C++來搭建Linux下C++開發環境,所以首先得下載安裝C++庫與C++的編譯器g++。上面說了GCC是包含g++和C++的庫,所以我們要下載和安裝GCC!

下載東西有時也不是想象的那麼簡單,我們下載東西一定要堅持一個原則:從官網下載!網上很多站點都會有雜七雜八的資源可供下載,但是下載了之後我們都不知道這個站點的東西是從哪裡來的,有沒有被第三方修改,以及是不是官方的最新版本等等。所以,為了保證下載的軟體的質量和可靠性,我們還是要去官網下載吧!

上官網GCC官網,找到最新的released GCC點選進入,一步一步的查詢,發現GCC隱藏的夠深,有兩個站點可以下載,一個是GCC mirror sites,一個是GCC svn server。我這裡是從映象站點下載,GCC 6.1的下載地址見:GCC 下載。我選擇的是今天2016.07.05最新版本gcc-6.1.0.tar.gz 。

下載GCC依賴的四個庫:
點選下載:GMP庫 或者GMP官網,對應GCC-6.1.0,我下載的是gmp-6.1.1.tar.bz2。
點選下載:MPFR庫或者MPFR官網,我下載的是mpfr-3.1.4.tar.gz。
點選下載:MPC庫或者MPC官網,我下載的是mpc-1.0.3.tar.gz。
點選下載:[ISL庫](ftp://gcc.gnu.org/pub/gcc/infrastructure/ and download),我下載的是isl-0.16.tar.bz2。

關於依賴關係,MPFR依賴GMP,MPC依賴GMP和MPFR,GCC依賴上面四個庫,所以推薦的編譯安裝順序是GMP->MPFR->MPC->ISL->GCC。

關於GMP、MPFR、MPC和ISL是什麼庫,這裡簡要說明一下:
(1)GMP:計算任意精度的數學庫, 包括支援整數,有理數和浮點。GMP包括大量的介面函式.-GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.

(2)MPFR: 一個多精度高效的浮點計算C語言庫, 基於GMP。-The MPFR library is a C library for multiple-precision floating-point computations with correct rounding. MPFR has continuously been supported by the INRIA and the current main authors come from the CACAO and Arénaire project-teams at Loria (Nancy, France) and LIP (Lyon, France) respectively see more on the credit page. MPFR is based on the GMP multiple-precision library.

(3)MPC:一個支援高精度複數的算術運算的C庫,並能正確的進行結果舍入。它擴充套件為IEEE-754標準對固定精度實浮點數到複數的轉換,對於每一個操作都定義了明確的語義。與此同時,高精度操作的速度是一個主要的設計目標。
Mpc is a C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result. It extends the principles of the IEEE-754 standard for fixed precision real floating point numbers to complex numbers, providing well-defined semantics for every operation. At the same time, speed of operation at high precision is a major design goal.

(4)ISL是用於操作集合和線性約束下的整數點的關係的庫,支援集合的交,並和補操作。
isl is a library for manipulating sets and relations of integer points bounded by linear constraints. Supported operations on sets include intersection, union, set difference, emptiness check, convex hull, (integer) affine hull, integer projection, and computing the lexicographic minimum using parametric integer programming. It also includes an ILP solver based on generalized basis reduction and operations geared towards polyhedral compilation such as dependence analysis, scheduling, and AST generation.

2.1.2第二步:編譯安裝依賴庫與GCC

使用tar解壓下載的gcc-6.1.0.tar.gz和依賴庫。按照上面的說的編譯安裝順序進行,具體參見Compiling GCC 6 on OS X。這是我花了很長時間千辛萬苦找到的資料,很詳細,一定要看。因為本人系統中沒有已經裝好的g++,所以不能順利的安裝,大家如果找到了在在沒有g++的機器上編譯安裝GCC的辦法,請留言告知,謝謝!

所以下面我就採用下載Fedora的gcc-g++的安裝包來安裝C++開發環境。

2.2使用軟體包來安裝C++開發環境

首先下載gcc-c++安裝包,下載地址:gcc-c++

我下載的是針對Fedora24釋出的gcc-c++-6.1.1-3.fc24.x86_64.rpm,大家可選擇自己對應的系統進行下載。
安裝命令如下:

sudo rpm -ivh gcc-c++-6.1.1-3.fc24.x86_64.rpm

結果提示如下錯誤:
gcc = 6.1.1-3.fc24 被 gcc-c++-6.1.1-3.fc24.x86_64 需要
libstdc++ = 6.1.1-3.fc24 被 gcc-c++-6.1.1-3.fc24.x86_64 需要
libstdc++-devel = 6.1.1-3.fc24 被 gcc-c++-6.1.1-3.fc24.x86_64 需要

原來gcc-c++的安裝還需要依賴其它的軟體包。於是我們下載對應版本的C++庫,libstdc++libstdc++-devel。我下載的是libstdc++-6.1.1-3.fc24.x86_64.rpmlibstdc++-devel-6.1.1-3.fc24.x86_64.rpm

現在開始安裝libstdc++。

sudo rpm -ivh libstdc++-6.1.1-3.fc24.x86_64.rpm

安裝完libstdc++再安裝libstdc++-devel。這裡需要強制安裝,不然會提示如下錯誤:

libstdc++(x86-64) = 6.1.1-3.fc24  libstdc++-devel-6.1.1-3.fc24.x86_64 需要

因為我們已經libstdc++,libstdc++-devel依賴libstdc++,但是rpm可能檢測不到我們已經安裝的libstdc++,所以只要確定我們已經成功安裝libstdc++,就可以強制安裝了。

sudo rpm -ivh --force --nodeps libstdc++-devel-6.1.1-3.fc24.x86_64.rpm

安裝完libstdc++和libstdc++-devel之後,再強制安裝gcc-g++。我們強制忽略gcc-g++依賴的gcc,因為我們不需要。我們需要安裝的只是C++開發環境,即編譯器g++和C++庫。

sudo rpm -ivh --force --nodeps gcc-c++-6.1.1-3.fc24.x86_64.rpm

好了,大功告成,C++的標頭檔案和庫會被預設安裝到/usr/include和/usr/lib64目錄下。關於使用rpm安裝軟體包指定安裝路徑,我還沒折騰過,大家可以嘗試實踐一下。

也不知道這種強制安裝和忽略gcc會不會帶來什麼問題,但是目前測試使用C++都沒有什麼問題。因為我安裝的是gcc-c++-6.1.1,g++預設使用C++11和C++14的新特性。所以下面是測試程式碼。

例子1,測試C++11引入的lambda表示式和初始化列表。

//test.cpp
//Program to test the C++ lambda syntax and initializer lists
#include <iostream>
#include <vector>

using namespace std;

int main(){
   // Test lambda
   cout << [](int m, int n) { return m + n;} (2,4) << endl;

   //Test initializer lists and range based for loop
   vector<int> V({1,2,3});

   cout << "V =" << endl;
   for(auto e : V) {
     cout << e << endl;
   }

   return 0;
}

編譯上面的test.cpp檔案:g++ test.cpp 然後執行./out,程式輸出:

6
V =
1
2
3

例子2,測試C++11引入的正則表示式。

#include <iostream>
#include <regex>
#include <string>

using namespace std;

int main(){
   string input;
   regex rr("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?");
   //As long as the input is correct ask for another number
   while(true)
   {
     cout<<"Give me a real number!"<<endl;
     cin>>input;
     if(!cin) break;
     //Exit when the user inputs q
     if(input=="q")
       break;
     if(regex_match(input,rr))
       cout<<"float"<<endl;
     else
     {
       cout<<"Invalid input"<<endl;
     }
  }
}

使用g++編譯通過。

小結

本文很多觀點也都是參考網上的資源,再加上自己的理解提出來的,難免出錯和產生無解,有任何疑問,觀點或者有權威的參考資料也請大家能夠不吝留言交流!

參考文獻

相關推薦

Linux離線手動下載安裝C++開發環境

1.前言 本人使用的作業系統是Fedora24。 1.1線上安裝軟體的方法 Linux下我們習慣了使用軟體包管理器來安裝我們需要的軟體,比如Red Hat公司的Fedora、RHEL(Red Hat Enterprise Linux)和後來加入紅帽的C

mac安裝c++開發環境

mac下安裝c++開發環境 1 註冊apple id   按照apple註冊步驟註冊apple id,我註冊時遇到如下問題 apple store完成建立apple id步驟中,選擇付款方式和賬單地址後,總會提示“如需幫助,請聯絡itune支援”,進而導致apple store無法下載軟體

linuxmongodb的下載安裝

1.下載安裝包cd /usr/local/srcwget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz地址注:這是64位的下載地址, 如果要32位,就把x86_64替換為i686.  這裡的版本用

demo開發之問題3在ubuntu安裝C++開發環境

轉載於https://itsfoss.com/c-plus-plus-ubuntu/  向大佬致敬 一、C++開發環境的安裝。 1. 安裝build-essential package sudo apt-get install build-essential you mus

linux用eclipse搭建python整合開發環境!

最近打算開始學習期待已久的python,由於以前寫程式碼都是vim+gcc(主要是寫c程式碼),所以想嘗試一下用整合開發環境。廣受歡迎的開源eclipse自然成了我的不二選擇,我的系統是ubuntu12,下面我們便開始搭建環境! 1.首先我們開始下載需要用到的軟體,第一個便

Linux安裝Eclipse C/C++開發環境

1. 安裝JDKsudo apt-get install sun-java6-jdk 2.配置 Java環境 sudo vim /etc/environment CLASSPATH=/usr/lib/jvm/java-6-sun/lib JAVA_HOME=/usr/lib/jvm/java-6-sun

Linux 安裝配置C/C++開發環境 Code::Blocks

Linux 下安裝配置C開發環境Code::Blocks  一、提前的話 要說C語言和Linux的關係大家應該都不會陌生,Linux系統核心就是用C語言開發的,所以所有的Linux系統下面 都會有C的編譯除錯工具,不過這些工具都是命令式的,正式開發的話會很不方便。Fedo

linux 安裝web開發環境

技術 cnblogs -- 時間日誌 java inux 協議 環境變量 含義 以下使用 linux centos系統 一、JDK的安裝 1、下載jdk-8u111-linux-x64.tar.gz 2、解壓該文件,將解壓後的文件復制到 /usr/local/jdk1.7

Linux離線安裝python項目的依賴包

機器 class pac pack linux site -- rem linux安裝 第一步新建一個文件夾,把python項目有需要的依賴包導出到site-packages下的requirements.txt中 1 $ pip3 freeze > requireme

Linux離線安裝MySQL

-c 系統 check 初始化 安裝mysql 系統安裝 OS option code Linux下安裝mysql 1 檢查並卸載已安裝mysql 命令:rpm -qa|grep -i mysql 命令:rpm -e --nodeps ‘上個命令後顯

Linux-Centos安裝java開發環境

1. 升級包  yum -y upgrade 2. 安裝java8 yum -y install java-1.8.0-openjdk*  3. 以下為相關指令 檢視CentOS自帶JDK是否已安裝:yum list installed | gr

linux 使用 ftp 下載 rpm 檔案並安裝時提示 rpmReadSignature 錯誤

  想下載並安裝一個花生殼客戶端(CentOS 6.5 x64),使用 wget 一直無法成功,只好在主機(Win7 SP1 x64)上用工具下載,然後放到主機裡設定的一個簡單的ftp server裡,再在伺服器裡下載。可一直提示rpmReadSignature 錯誤,導致無法安裝。原來只要在

如何在linux(lubuntu)搭建C/C++開發環境

1.在linux下搭建C/C++開發環境,用如下命令: apt-get install build-essential 2.如果要完整構建的話,用如下命令: apt-get install build-dev 3.安裝Gnome開發環境(包括C、Gtk、Gnom

Linux】Ubuntu 14.04搭建 C/C++開發環境

       之前寫程式碼都是在 Windows作業系統下開發程式的,也用過很多編輯器例如 Visual Studio 2015/2013/201/2012,Dev,VC6.0,NetBeans。當然前幾個是在Windows下的C++開 發環境。最後一個是Java的開發環境

關於虛擬機器安裝CentOS7及C++開發環境的搭建

       由於平時工作的環境就是在伺服器端的CentOS上進行C++的開發,所以週末閒來無事就在自己的電腦上安裝了虛擬機器,然後再虛擬機器上安裝的CentOS的作業系統。虛擬機器軟體用的是VMware workstation12版本的,安裝按照引導直接進行安裝即可,沒有

Ubuntu 14.04安裝eclipse搭建C++開發環境

安裝過程分為兩部分:1.JAVA開發環境,即JDK的安裝;2.eclipse的安裝; 一.安裝包下載    裡面有各種版本可供選擇,此處我選擇的是Linux x64版本,檔名為:jdk-8u91-linux-x64.tar.gz    選擇Eclipse IDE fo

Linux配置Eclipse,進行C/C++開發

一、前期準備 1、 下載JRE(Java Runtime Environment) 找到包jre-8u131-linux-x64.rpm點選下載 2、 下載Eclipse SDK(C++) 二、安裝 1、 安裝JRE rpm -i jre-8u131-li

Linux搭建C/C++開發環境

1.安裝編譯器 Linux下最流行的編譯器是gcc 安裝gcc編譯器 sudo apt-get install build-essential 2.然後建立一個C程式原始檔,並在編輯器中編碼 touch Hello.c vi Hell

Windows 基於 Eclipse 的視覺化遠端 Linux C/C++ 開發環境搭建

1、簡介     Windows 下遠端 Linux 開發工具,比較著名的就是 WinGDB 和 Magic C++。都是商業軟體,而且配置複雜,據說還不穩定。其實,我們想要的就是個圖形環境 IDE,而且是直接操作的遠端 Linux 環境。經過若干的實踐,發現使用 Secu

Ubuntu安裝C/C++開發環境【!!!有更新!!!Ubuntu14.10使用eclipse搭建C語言開發環境

(1)第一步安裝Eclipse,有兩種方法,使用軟體市場搜尋即可得到,安裝即可 第二種是使用終端安裝,命令如下: sudo su進入root模式 輸入密碼 然後 輸入:sudo apt-get install eclipse  開始安裝!  至此已經完全安裝eclipse