ubuntu初步運用配置問題

2021-07-27 03:37:31 字數 3737 閱讀 4953

啟動終端,進入root模式,安裝gcc和g++

ubuntu:

***@***:~$ sudo apt-get install build-essential

***@***:~$ gcc --version

***@***:~$ sudo apt-get install g++-4.8
***@***:~$ g++ --version

[***@*** ~]$ g++ -c hello.cpp
輸出結果是乙個hello.o檔案,這是編譯過程的生成的中間檔案。-c 表示只編譯,不鏈結

[***@*** ~]$ g++ -o hello.out hello.o
輸出結果是乙個hello.out檔案,這是最終的可執行檔案。-o 表示輸出檔案,hello.o是上一步生成的.o檔案。

當然,如果第2、3步是可以合併執行,直接執行命令

[***@*** ~]$ g++ -o hello.out hello.cpp
然而第2、3步分開執行是有意義的,後面會講到。

最後執行以下hello.out驗證一下輸出結果唄

[***@*** ~]$ ./hello.out
實際開發過程中當然不可能只有乙個cpp這麼簡單,有時候會有非常多的.h和.cpp檔案相互配合,那麼上面直接通過g++編譯可執行檔案就沒那麼簡單了。我們需要借助make這個強大的專案構建工具,幫助我們構建和組織專案**。

假設現在有如下3個檔案:hw2.cpp、solution.h和solution.cpp

1 /* solution.h */

2 class solution ;

1 /* solution.cpp */

2 #include 3 #include "solution.h"

4 void solution::say()

1 /* hw2.cpp */

2 #include "solution.h"

3 int main ()

可以看到這個簡單例子包括標頭檔案引用、定義和實現分離等情況,如果直接g++ -o hw2.out hw2.cpp將會報未定義引用的錯誤:

[***@*** ~]$ g++ -o hw2.out hw2.cpp 

/tmp/ccimytxf.o:在函式『main』中:

hw2.cpp:(.text+0x10):對『solution::say()』未定義的引用

collect2: 錯誤:ld 返回 1

這時make就該大顯身手了。

首先我們還需要了解一下makefile。

在專案的根目錄下建立乙個makefile檔案,以告訴make如何編譯和鏈結程式。

1 build : hw2.o solution.o

2 g++ -o build hw2.o solution.o #注意前面必須是tab,不能是空格

3 hw2.o : hw2.cpp solution.h

4 g++ -g -c hw2.cpp

5 solution.o : solution.h solution.cpp

6 g++ -g -c solution.cpp

7 clean :

8 rm hw2.o solution.o build

先來解釋一下makefile的基本語法規則:

target ... : prerequisites ...

command #注意前面是tab

target是乙個目標檔案,可以是object file,也可以是執行檔案,還可以是乙個標籤;

prerequisites是要生成那個target所需要的檔案或是目標;

command是make需要執行的命令(任意的shell命令)。

說白了就是target這乙個或多個目標,依賴於prerequisites列表中的檔案,其執行規則定義在command裡。如果prerequisites列表中檔案比target要新,就會執行command,否則就跳過。這就是整個make過程的基本原理。

那麼,我們回頭看看上面定義的makefile檔案,我們解釋一下每兩行的作用

1 build : hw2.o solution.o

2 g++ -o build hw2.o solution.o

target是build,依賴於hw2.o 和 solution.o,執行的命令是 g++ -o build hw2.o solution.o

意思是通過g++鏈結hw2.o和solution.o,生成可執行檔案build,prerequisites有兩個.o檔案,是因為**裡hw2引用了solution.h。

3 hw2.o : hw2.cpp solution.h

4 g++ -g -c hw2.cpp

target是hw2.o,依賴於hw2.cpp和solution.h,執行命令是g++ -g -c hw2.cpp

意思是通過g++編譯hw2.cpp檔案,生成hw2.o檔案,g++命令中 -g 表示生成的檔案是可除錯的,如果沒有-g,除錯時無法命中斷點。

5 solution.o : solution.h solution.cpp

6 g++ -g -c solution.cpp

同上,編譯solution.cpp檔案,生成solution.o檔案。

7 clean :

8 rm hw2.o solution.o build

這裡clean不是乙個可執行檔案,也不是乙個.o檔案,它只不過是乙個動作名字,類似於label的作用,make不會去找冒號後的依賴關係,也不會自動執行命令。如果要執行該命令,必須在make後顯示指出整個動作的名字,如make clean。

好了,接下來說一下make的工作原理。在預設的方式下,我們只需輸入make,則發生了以下行為:

a. make在當前目錄下找名為makefile或makefile的檔案;

b. 如果找到,它會找檔案中的第乙個target,如上述檔案中的build,並作為終極目標檔案;

c. 如果第乙個target的檔案不存在,或其依賴的.o 檔案修改時間要比target這個檔案新,則會執行緊接著的command來生成這個target檔案;

d. 如果第乙個target所依賴的.o檔案不存在,則會在makefile檔案中找target為.o的依賴,如果找到則執行command,.o的依賴必是.h或.cpp,於是make可以生成 .o 檔案了

e. 回溯到b步執行最終目標

看一下執行結果

[***@*** ~]$ make

g++ -g -c hw2.cpp

g++ -g -c solution.cpp

g++ -o build hw2.o solution.o #注意前面必須是tab,不能是空格

[***@*** ~]$ ./build

hi![***@*** ~]$

由於makefile檔案中加了-g這一選項,於是可以通過gdb進行除錯,並且會命中斷點,這裡感興趣可以再了解一下gdb的使用。

ubuntu初步配置

1.配置 vim ln s vim vimrc vimrc 建立軟鏈結 git clone vim bundle vundle 完成之後用 vim 開啟任意檔案,在命令模式下用 bundleinstall 安裝 bundleinstall 2.配置 php5 apache2 mysql sudo a...

Auto Layout的初步運用。

1.想要做到自適應,我們就得先確定控制項相對於父類檢視位置以及寬高,也就是確定frame。2.那麼自適應無非就是加些約束,來控制ui在父類檢視中的位置以及寬高。3.目前可以直接在storyboard中直接新增約束條件。如圖 4.點中控制項,按ctrl 滑鼠左鍵,即可增加約束條件。5.約束條件分為3類...

Div Css的初步運用

採用div css模式的 具有以下優勢 1 表現和內容相分離 2 簡潔,提高頁面瀏覽速度 3 易於維護和改版 4 提高搜尋引擎對網頁的索引效率。然後呢html檔案中放置css有三種型別 內聯 內嵌 外聯三種。感覺css中必須要清楚它的六中選擇符 1 html選擇符 2 類選擇符 3 id選擇符 4 ...