1. 程式人生 > >Linux開發工具相關問題

Linux開發工具相關問題

在Linux的系統設定問題上,學會使用文字編輯器來編輯Linux引數配置檔案是一項很重要的能力。Linux環境下的文字編輯器有很多,重點掌握VIM卻是很有必要的。VIM是VI的升級版,很多軟體的編輯介面會主動呼叫VI,而VIM已經不僅僅可以作為一個文字編輯器,也可以作為程式開發工具,供程式開發者使用。

一、 vim的配置

一些簡單配置Linux的命令有:

set nu // 在左側行號 set tabstop=4 //tab 長度設定為 4 set nobackup //覆蓋檔案時不備份 set cursorline //突出顯示當前行 set ruler //在右下角顯示游標位置的狀態行 set autoindent //自動縮排 set mouse=a //允許使用滑鼠移動游標 set showmode //顯示左下角狀態行 set hlsearch //搜尋時關鍵字高亮反白 set showcmd

配置vim的檔案在目錄/etc下面,有個名為vimrc的檔案,這就是系統中公共的vim配置檔案,對所有使用者都開放。而在每個使用者的主目錄下,都可以自己建立私有的配置檔案,命名為:”.vimrc”。用vim開啟.vimrc鍵入上述命令儲存即可。

二、常用的編輯器, 以及這些編輯器之間的區別和優缺點.

Linux中強大的編輯器列表

  • VI 編輯器是一個基於命令列的、功能強大的文字編輯器,最早為 Unix 系統開發,後來也被移植到許多的 Unix 和 Linux 發行版上。 VIM(也被稱作 VI IMproved)——VI 編輯器的高階版本,在 VI 已經很強的功能上添加了更多的功能,這些功能有:

    • 支援更多 Linux 發行版,
    • 支援多種程式語言,包括 python、c++、perl 等語言的程式碼塊摺疊,語法高亮,
    • 支援通過多種網路協議,包括 http、ssh 等編輯檔案,
    • 支援編輯壓縮歸檔中的檔案,
  • Emacs:著名的整合開發環境和文字編輯器。Emacs和Vim對於 Linux 桌面上進行文字編輯是重量級的,Emacs演化出了眾多分支,其中使用最廣泛的兩種是:1984年由Richard Stallman發起的GNU Emacs,以及1991年發起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當的相容性。最新的的GNU EMACS的功能包括:

    • 內容感知編輯模式,包括許多檔案型別的語法著色。
    • 完整的內建文件,包括新使用者教程。
    • 幾乎所有人類指令碼都支援 完全Unicode。
    • 高度可定製,使用Emacs Lisp程式碼或圖形介面。
    • 超越文字編輯,包括功能的整個生態系統的專案策劃人,郵件和新聞閱讀器,偵錯程式介面, 日曆,和更多。
    • 用於下載和安裝擴充套件的包裝系統等等

詳情點選:GNU

  • Eclipse:Eclipse 是一個開放原始碼的、基於Java的可擴充套件開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過外掛元件構建開發環境。幸運的是,Eclipse 附帶了一個標準的外掛集,包括Java開發工具(Java Development Kit,JDK)。最初主要用來Java語言開發,但是目前亦有人通過外掛使其作為其他計算機語言比如C++和Python的開發工具。

    • 在Eclipse中,完全勝任以下程式語言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等
  • Brackets:Adobe公司釋出了Brackets 1.0,一款針對Web設計人員的免費開源文字編輯器,內建HTML,CSS和JavaScript,方便開發者進行HTML,CSS和JavaScript程式設計。Brackets 1.0適用於Windows,Mac和Linux作業系統,為Web設計人員和開發人員提供針對性的功能,如:

    • 實時預覽,在瀏覽器檢視和原始碼之間輕鬆切換,
    • 在特定的程式碼位進行內聯編輯工作,而無需彈出式視窗或其他選項卡。
    • 下載和使用擴充套件,新增功能以幫助他們的工作流程,如Git整合和JSHint支援
    • 摘要預覽,自動從PSD獲取設計資訊,
    • Brackets作為一個開源專案,對於想要自定義文字編輯器的使用者,可以從Github上Brackets專案頁面下載原始碼並修改程式碼進行編譯,來適合自己的需求。
  • LightTable是一個免費開放原始碼的編輯器,該編輯器有一個非常乾淨的介面,並有大量擴充套件。它與Windows、Mac和Linux都相容,是高度可定製的。使用Light Table,開發者只需開啟一個瀏覽器視窗即可實時檢視更改,並且支援不同的嵌入。

    • 更改: 我們從 NW.js 切換到了 Electron
    • 更改: Light Table 的發行與自更新程序完全地公開在github上
    • 增加: Light Table 可以用提供的指令碼在各個支援的平臺上從原始碼構建
    • 增加: Light Table 大部分的 node 程式碼庫將通過 npm 依賴來安裝,以取代以前採用分叉庫的方式
    • 增加: 有效文件。更多詳情內容見下面
    • 修復: 版本號 >= OSX 10.10的系統下的主要的可用性問題
    • 更改: 官方不再提供 32位 Linux 軟體包下載,不過仍然支援從原始碼構建
    • 修復: ClojureScript eval 支援 ClojureScript 的現代版本
  • Chocolat:Chocolat本身是Mac OS 的最佳程式碼編輯器。該編輯器旨在與OS無縫整合,Chocolat為JS、Python和HTML提供拖放功能、拆分編輯、程式碼摺疊和程式碼完成,兼具原生的Cocoa及強大的文字編輯功能。Chocolat支援很多種程式語言的關鍵字高亮顯示、視窗分割、標籤頁、色彩主題等功能。介面和MacVim非常相似。

  • Sublime Text:Sublime Text 是一個輕量、簡潔、高效、跨平臺的編輯器。

    • 支援多游標操作:它能讓你對文字中的多個地方同時做修改,你可以看到多個地方在你輸入的時候同時發生變化,
    • command palette能夠讓你輕鬆的做任何操作,勉去了記憶眾多快捷鍵的痛苦。你只需要開啟command palette ,輸入幾個字母,Sublime Text會用模糊查詢給你提供建議和選項。跟直接使用快捷鍵幾乎沒區別
    • 編輯檔案的同時你可以啟動編譯,看到輸出結果,這種互動能讓你快速發現編譯錯誤
    • 擴充套件性很好,它使用了Python式的外掛系統。

三、 常用的編譯器(不限制程式語言, 不限制平臺)

這些編譯器有:

  • MSVC:是指微軟的VC編譯器,隨著微軟釋出基於Clang / C2,MSVC與Clang / C2並行,繼 Google Chrome 宣佈棄用微軟 C++ 編譯器(MSVC)Windows 版 Chrome 改用 Clang 之後,Mozilla 的 Firefox 瀏覽器也宣佈開始使用 Clang 編譯器編譯其 Windows 版本。
  • Clang:Clang 是一個 C++ 編寫、基於 LLVM、釋出於 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(之一)就是超越 GCC。Clang 的特性有:
    • 快:通過編譯 OS X 上幾乎包含了所有 C 標頭檔案的 carbon.h 的測試,包括預處理 (Preprocess),語法 (lex),解析 (parse),語義分析 (Semantic Analysis),抽象語法樹生成 (Abstract Syntax Tree) 的時間,Clang 是 Apple GCC 4.0 的 2.5x 快。
    • 記憶體佔用小:Clang 記憶體佔用是原始碼的 130%,Apple GCC 則超過 10x。
    • 診斷資訊可讀性強:我不會排版。其中錯誤的語法不但有原始碼提示,還會在錯誤的呼叫和相關上下文的下方有~~~~~和^的提示。
    • GCC 相容性。
    • 設計清晰簡單,容易理解,易於擴充套件增強。與程式碼基礎古老的 GCC 相比,學習曲線平緩。
    • 基於庫的模組化設計,易於 IDE 整合及其他用途的重用。由於歷史原因,GCC 是一個單一的可執行程式編譯器,其內部完成了從預處理到最後程式碼生成的全部過程,中間諸多資訊都無法被其他程式重用。Clang 將編譯過程分成彼此分離的幾個階段,AST 資訊可序列化。通過庫的支援,程式能夠獲取到 AST 級別的資訊,將大大增強對於程式碼的操控能力。對於 IDE 而言,程式碼補全、重構是重要的功能,然而如果沒有底層的支援,只使用 tags 分析或是正則表示式匹配是很難達成的。
  • GCC/G++:gcc和g++都是GNU(組織)的一個編譯器。gcc 是c的編譯器,g++是c++的編譯器。
  • ICC:全稱Intel C++ Compiler,是Intel開發的C/C++/Fortran編譯器套裝,適用於Linux、Microsoft和Mac OS X作業系統,沒有非IA指令集版本(就是說僅供x86架構CPU使用)。ICC廣泛應用於高效能運算、分散式計算等商業計算領域,其向量化和並行化效能是業界的標杆,能夠充分發揮現代處理器的特性。

ICC官方網站:ICC

  • IBM XL C++:IBM® XL C/C++ 是一種編譯器,有助於為 IBM Power Systems™ 建立和維護使用 C/C++ 編寫的應用,能最大限度地提高硬體利用率。缺點則是在編譯時間上往往過長。對C++標準的支援、開源軟體的支援、錯誤資訊的提示上都不夠友好,但隨著13.2開始結合Clang正在進行優化。

四、為什麼除錯的時候需要編譯選項中新增 -g. 介紹readelf命令.

1 .除錯的時候加上 -g 是為了生成除錯資訊,以便於GNU偵錯程式利用該資訊,
2.readelf命令用來顯示一個或者多個elf格式的目標檔案的資訊,可以通過它的選項來控制顯示哪些資訊。這裡的elf-file(s)就表示那些被檢查的檔案。可以支援32位,64位的elf格式檔案,也支援包含elf檔案的文件(這裡一般指的是使用ar命令將一些elf檔案打包之後生成的例如lib*.a之類的“靜態庫”檔案)。(ELF檔案, 其實就是Executable & Linkable Format, 是一種檔案格式, 我們常見的目標檔案、動態庫和可執行檔案, 都屬於這個型別。)

五、 在Linux下實現進度條程式. 通過makefile進行編譯. 以及實現全綵色的進度條.

1.緩衝區概念 緩衝區(buffer)這個中文譯意源自當計算機的高速部件與低速部件通訊時,必須將高速部件的輸出暫存到某處,以保證高速部件與低速部件相吻合. 後來這個意思被擴充套件了,成為”臨時存貯區”的意思。 緩衝區分為:無緩衝、行緩衝、全緩衝。 無緩衝:表示的是沒有緩衝,可以將資訊立馬顯現出來,典型代表是標準錯誤流stderr。 行緩衝:表示的是輸入輸出遇到換行才執行真正的I/O操作。典型的代表是鍵盤的操作。 全緩衝:表示的是輸入輸出寫滿緩衝區才執行I/O操作。典型的代表是磁碟的讀寫。 fflush: fflush,函式名, 清除讀寫緩衝區,需要立即把輸出緩衝區的資料進行物理寫入時。 fflush(stdin)重新整理標準輸入緩衝區,把輸入緩衝區裡的東西丟棄[非標準] fflush(stdout)重新整理標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上

本文來自 Important_ 的CSDN 部落格 ,全文地址請點選:Linux下實現進度條

2.進度條程式碼 prograss_bar.c

#include<stdio.h>
#include<string.h>
#include<unistd.h>

int main()
{
	int i = 0;
	char bar[102] = { 0 };
	const char* lable = "|/-\\";
	while(i <= 100)
	{
		printf("[%-100s][%d%%][%c]\r",bar, i, lable[i%4]);//緩衝區未重新整理		
		fflush(stdout);//重新整理緩衝區	
		bar[i++] = '#';
		usleep(100000);//沉睡100ms
	}
	printf("\n");
	return 0;
}

Makefile

prograss_bar:prograss_bar.o
	gcc prograss_bar.c -o prograss_bar
prograss_bar.o:prograss_bar.s
	gcc -c prograss_bar.s -o prograss_bar.o
prograss_bar.s:prograss_bar.i
	gcc -S prograss_bar.i -o prograss_bar.s
prograss_bar.i:prograss_bar.c
	gcc -E prograss_bar.c -o prograss_bar.i

.PHONE:clean

clean:
	rm -f prograss_bar.i prograss_bar.s prograss_bar.o prograss_bar


在這裡插入圖片描述 3.彩色進度條 prograss_bar.c

#include<stdio.h>
#include<string.h>
#include<unistd.h>

int main()
{
	int i = 0;
	char bar[102] = { 0 };
	const char* lable = "|/-\\";
	while(i <= 100)
	{
		printf("\e[34m[%-100s][%d%%][%c]\r\e[0m",bar, i, lable[i%4]);
		fflush(stdout);	
		bar[i++] = '#';
		usleep(100000);
	}
	printf("\n");
	return 0;
}

在這裡插入圖片描述 4.當出現下面的情況時可以試下調整字型大小(Ctrl + ‘-’ 和 Ctrl + Shift+ ‘+’)或者是解析度。

在這裡插入圖片描述

六、 Linux下軟體安裝的幾種方式(原始碼安裝, rpm安裝, yum安裝).

一、原始碼安裝:

步驟: 編譯原始碼,然後安裝 1.1安裝準備: a、 首先用yum安裝gcc,用於編譯原始碼 b、管網下載原始碼包 c、winSCP windows與Linux傳輸檔案(若直接用安裝軟體的linux電腦下載就不用傳輸了)

1.2 安裝過程 a、解壓 b、進入解壓後的目錄配置檔案 ./configure # 大多數情況下原始碼包都會帶configure這樣一個配置工具,具體使用方法可以vim檢視其內容 c、make #編譯原始碼包 如果報錯了 make clean 清除快取重新make d、make install # 安裝 然後刪除原始碼包軟體和安裝目錄

二、rpm安裝:

rpm安裝:安裝別人編譯好的軟體包

rpm即Redhat Package Manager,Redhat的軟體包管方式,適用rpm install 命令

rpm不僅已經把軟體原始碼編譯成二進位制檔案,而且對軟體包依賴的檔案,系統環境等做了統計副檔名:rpm

還有一種SRPM:沒有編譯成二進位制檔案,但是也包含rpm的特性

三、yum安裝:

用rpm方式安裝軟體,如果依賴的軟體沒有事先安裝,軟體無法安裝成功。

為了解決這個問題,推出yum方式。

既然依賴的軟體沒有安裝在機器上,那麼就先安裝依賴檔案,再安裝我需要安裝的軟體。

因此yum在安裝軟體同時安裝依賴檔案。

因此需要一個yum源來放依賴的軟體源,對比被安裝機器上rpm軟體庫歸根到底,yum也是基於rpm的。

Linux下軟體安裝方式詳解:Linux安裝軟體