搭建Ubuntu下C/C++編譯環境
1. 安裝Ubuntu。
2. 安裝gcc
方法一:
sudoapt-get install build-essential
安裝完了可以執行
gcc--version的命令來查看版本,輸出如下:
gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)
Copyright(C)2007FreeSoftwareFoundation,Inc.
編譯則使用Ubuntu gcc命令。要往下學習首先就得熟悉gcc命令的用法。
Ubuntugcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。
一. 常用編譯命令選項假設源程序文件名爲test.c。
1. 無選項編譯鏈接
用法:#gcc test.c
作用:將test.c預處理、彙編、編譯並鏈接形成可執行文件。這裏未指定輸出文件,默認輸出爲a.out。
2. 選項 -o
用法:#gcc test.c -otest
作用:將test.c預處理、彙編、編譯並鏈接形成可執行文件test。-o選項用來指定輸出文件的文件名。
3. 選項 -E
用法:#gcc -E test.c -otest.i
作用:將test.c預處理輸出test.i文件。
4. 選項 -S
用法:#gcc -S test.i
作用:將預處理輸出文件test.i彙編成test.s文件。
5. 選項 -c
用法:#gcc -c test.s
作用:將彙編輸出文件test.s編譯輸出test.o文件。
6. 無選項鍊接
用法:#gcc test.o -otest
作用:將編譯輸出文件test.o鏈接成最終可執行文件test。
7. 選項-O
用法:#gcc -O1 test.c -otest
作用:使用編譯優化級別1編譯程序。級別爲1~3,級別越大優化效果越好,但編譯時間越長。
二. Ubuntu gcc多源文件的編譯方法
如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件爲test.c和testfun.c]
1. 多個文件一起編譯
用法:#gcc testfun.ctest.c -o test
作用:將testfun.c和test.c分別編譯後鏈接成test可執行文件。
2. 分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接。
用法:
#gcc -ctestfun.c //將testfun.c編譯成testfun.o
#gcc -ctest.c //將test.c編譯成test.o
#gcc -otestfun.o test.o -o test //將testfun.o和test.o鏈接成test
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。
3. 安裝eclipse
a) 安裝配置Java(eclipse需要)
Ubuntu 在安裝時,如同大部分Linux 發行版一樣,都會同時安裝 GNU 版本的 Java。這個 Java 的實用程度太低,尤其對於開發人員來說,是沒有太多用處的。在 Ubuntu 下,安裝 SUN Java 是一件很容易的事情。第一步:
sudoapt-get install sun-java6-jdk
安裝完畢之後,選擇默認 java:
sudo update-alternatives --config java
然後配置環境變量:
sudo vim /etc/environment
在其中添加如下兩行:(不同版本應不同,這裏是java6)
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun保存退出。
b) 安裝 Eclipse
sudo apt-getinstall eclipse-platform
sudo apt-get install eclipse-pde
雖然已經這時新安裝的java 已經成爲系統默認的 jvm,但是 Eclipse 並不會用 update-alternative 設置的 jvm 來啓動自身,而使用的是以前的 GNU Java。GNU Java 是 1.4.2 的實現,而且在性能上遠不如 SUN 的實現。爲了讓 Eclipse 利用 SUN Java 啓動,我們還需要繼續配置。首先將 SUN Java 完完全全的設置爲系統的默認 JDK:
sudo update-java-alternatives -s java-6-sun
然後編輯 JVM 配置文件:
sudo vim /etc/jvm
將文件中的
/usr/lib/jvm/java-6-sun
這一行填入到配置塊的頂部。由於 Eclipse 會忽略 Ubuntu 的通用 Java 設置(貌似一個 bug),我們需要繼續編輯 Eclipse 的 java_home 文件:
sudo vim /etc/eclipse/java_home
如同上面一樣,將
/usr/lib/jvm/java-6-sun
這一行填入到文件的頂部。
c) 安裝 Eclipse, c/c++插件
1、啓動eclipse,
2、選擇Help->InstallNew Software...,在Work with的框框下複製下面的地址: http://download.eclipse.org/releases/galileo
3、選擇Collaboration->MylynBridge: C/C++ Development,安裝,重啓eclipse。
4、同上述2、3,選擇ProgrammingLanguages->Eclipse C/C++ Development,都選上吧,現在硬盤不貴的。重啓eclipse,試試吧,有tutorial的。
備註:有些版本還需要安裝GTK+庫,使用apt-getinstall libgtk2.0*可得到
4. 安裝g++
方法一:
sudo apt-get install make gcc g++
再裝上函數手冊
sudo apt-get install manpages-dev
方法二:
sudo apt-get install build-essential
執行完後,完成了gcc,g++,make的安裝。build-essential 是一整套工具,gcc,libc等等
5. 虛擬機下共享文件
Windows和Linux間有很多文件共享的方式,這裏我總結了一下。假設你的Host計算機是Windows,Guest是Linux哈。
1.利用Samba
這是我用得最多的方式
備註:試了一下,比較麻煩
2.在Linux下配置Apahce
在Linux下配置Apahce,然後在Windows下通過www方式把Linux下的文件下載下來。這種方式只能把Linux的文件傳到Windows,不能把Windows的文件傳到Linux.
3.在Linux下配置Ftp
用vsftp或者wu-ftp都可以,配置成上傳權限的,然後Windows和Linux就可以相互共享文件了。
4.Windows下配置WWW服務
用IIS,Apache或者其它的都可以。如果你的Linux只有命令行的話,就用wget命令吧,可以很方便地下載文件。
5.Windows下配置Ftp
用serv-u比較簡單
6.利用Windows的文件共享功能
比如說你的Windows的IP爲192.168.0.1,共享了一個叫share的目錄,那麼就可以用下列命令
mount -t smbfs //192.168.0.1/share /mnt -o username=user%passwd
或者smbmount//192.168.0.1/share /mnt -o username=user%passwd(用這個命令要安samba哦)
7.用vmware tools工具
SharedFolders是Vmware4 的一個新功能,更加方便了在Host,Guest操作系統間共享文件。但是使用前要安裝vmwaretools.
點擊setting->vmwaretools install
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
裏面有一個vmwaretools的tar包,解開執行vmware-tools-install.pl腳本,一路回車,一般沒有問題。
點擊Edit->VirtualMachine Settigns->Option->SharedFolders->Add,選定要共享的文件夾並給這個文件夾命名,下一步。選定“Enable thisshare”,確定以後,vmware會把這個文件夾自動mount到/mnt/hgfs目錄下。
備註:是否成功和ubuntu與vmwaretools的版本有關,需要彼此匹配。
8.直接掛接物理硬盤或者硬盤分區
不過vmware也是支持直接mountHost機器的磁盤,方法是在虛機設置裏新建磁盤,類型選“Usephysicaldisk(foradvanced users)”,再選定磁盤和分區就可以。但是這樣的操作可能會引會文件系統的不一致,導致錯誤,不推薦使用。
9.用ISO文件
虛擬機裏面的光驅可以有物理光驅和ISO文件兩種,我們可以把我們的文件重點製件成ISO文件(用WinIso),然後在Linux中作爲CDROM掛接。
6. Samba安裝
Ubuntu下samba的安裝設置
步驟1:Ubuntu下安裝samba
#apt-getinstall samba4
#apt-getinstall smbfs
步驟2:添加linux用戶
#useradduser1 //添加用戶名user1
#passwduser1 //給用戶名user1添加密碼
#mkdir/home/user1 //建立user1的home目錄,如果不用這個用戶名來登陸linux,此步驟不是必需
#chown-R user1:user1 /home/user1 //給user1的home目錄設置好權限
步驟3:給samba服務器添加用戶
說明:登陸samba的用戶必須已經是linux中的用戶
#smbpasswd-a user1 //添加並給user1設置samba密碼
步驟4:smb.conf設置
#cd/etc/samba //進入設置目錄
#mv smb.conf smb.conf.bak//做好備份,直接將系統默認配置文件改名
#vimsmb.conf //建立和配置smb.conf文件
[global]
workgrop=x1 //X1爲你局域網中的工作組名
serverstring=x2 //x2爲你linux主機描述性文字,比如:samba server。
security=user//samba的安全等級,user代表需要輸入用戶名和密碼,改成share則不需要輸入用戶名和密碼
[x3] //方框號中的x3這個名字可以隨便取,只是在win的網上鄰居中顯示的共享文件夾名
path=/home/x4//x4爲你要共享的文件夾名,在共享前還要建立這個文件夾,並設好權限以便訪問,下面會說明。
validusers=user1 //這個x4共享目錄只允許user1這個用戶進入
public=no //no表示除了user1這個用戶,其它用戶在進入samba服務器後看不見x4這個目錄,如果爲yes,雖然能看見x4這個目錄,但除了user1這個用戶能進入這個目錄,其它人進不了。
writable=yes //允許user1在x4目錄中進行讀和寫操作,反之no
//存盤退出
#testparm //檢查一下語法錯誤,比如拼錯
步驟5:建立共享目錄
#mkdir /home/x4
#chown -R user1:user1 /home/x4 //因爲是root建立的目錄,其它用戶只有讀的權限,所還得把權限改一下。當然也可以簡單的用#chmod 777 /home/x4。還有個問題就是共享裏目錄的文件如果有些能訪問有些不能訪問,那肯定也是權限的問題,進入/home/x4,直接#chmod 777 *來解決。
步驟6:重啓samba服務
#/etc/init.d/samba restart
7. windows客戶端連接到samba服務器
首先確保你的服務端已經配置好samba併成功啓動服務,方法可參考此文章http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx,我們就可以從Windows 客戶端通過Windows網絡連接到Samba,這裏以 Windows XP 爲例,有兩種方法:
1、網上鄰居-->查看工作組計算機-->SambaServer
2、打開運行(windows鍵+R),輸入配置samba服務器的主機名或者IP(格式:\\192.168.1.98)
3、進入samba可以看到我們配置的共享目錄名,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步驟4配置的爲share
4、第一次登錄需要輸入用戶名和密碼,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步驟6配置的爲username的用戶名,可勾選記住我的密碼,以後在此機器訪問samba服務器就可以直接登錄了。
8. cvs客戶端設置
ubuntu有兩種cvs客戶端程序:cvs和cvsnt。
我安裝了cvsnt
0. 安裝cvsnt
1. 在~/.bashrc設置CVSROOT變量:
exportCVSROOT=:pserver:[email protected]:/export/home/cvsroot
改了以後,用戶需要重新註冊
2. 創建cvs目錄 mkdir~/cvsroot
3. cdcvsroot
cvs login
xxx(密碼)
4.checkout項目:
cvs co a/b/project/src
5. 常用命令:(斜槓後表示縮寫)
cvs checkout / co
cvs update / up
cvs commit / ci
查看一個文件的提交情況:cvs logfilename
對比兩個版本文件的情況:cvs diff -r version_1 version_2 file_name
6. 獲得一個文件的歷史版本
cvs update -r 1.3 test.c
-r 後,文件成爲一個tag,是無法修改的,需重新從根目錄checkout
9. 安裝 vim
sudo apt-get install vim
10. 安裝vfftp
sudoapt-get install vsftpd
察看是否打開21端口
Sudonetstat –tulnp | grep 21
登陸
ftp localhost
輸入Ubuntu的用戶名、密碼登陸
ls(會顯示home目錄的文件)
運行:
standalone
最普通的方式
Sudoservice vsftpd
更加詳細的文檔見http://wiki.ubuntu.org.cn/Vsftpd
11. 安裝pdb(Linux調試工具)
安裝gcc時會默認安裝
12. 安裝insight(pdb界面調試工具)
如果你的Ubuntu版本<10.04,你可以直接sudoapt-get install insight安裝,不用從源碼安裝.Ubuntu 10.04以上的版本,刪除了對Insight的默認支持,只能下載insight的源碼編譯安裝。源碼在ftp://sourceware.org/pub/insight/releases/上得到。
1 解壓insight-6-8-1
sudo tar jvxfinsight-6-8-1.tar.bz2
2 修改源代碼,然後進入insight-6-8-1/gdb
cdinsight-6-8-1/gdb
sudo gediti386-linux-nat.c
在頭文件部分加上:
#include"i387-tdep.h"
保存,退出
3.從新回到 insight 目錄,生成Makefile
cd ..
sudo ./configure
4 開始編譯
sudo make
5.遇到錯誤,編譯一段時間過後就會發現本貼一開始提到的錯誤,一些warning被當成錯誤了
cd gdb #(進入insight下的gdb目錄)
sudo geditMakefile
找到WERROR_CFLAGS =-Werror,將其改爲
WERROR_CFLAGS=#-Werror(這裏也可以將‘=’後面的內容刪除掉變成WERROR_CFLGAS= )
保存退出
仍然回到insight目錄
cd ..
6.接着make
sudo make
7.這時再過段時間看看,是不是編譯通過 呢
編譯通過後安裝 sudo makeinstall
最後補充幾點:
1. 沒有必等到make出error的時候再去添加頭文件,開始的時候加上就好,一氣呵成的編譯。
另:頭文件之間有前後的依賴關係,要把i387-tdep.h放到include 較爲靠後的位置,沒有查到底是依賴於哪個頭文件,我把它放在了
代碼:
#ifdefHAVE_SYS_REG_H
#include<sys/reg.h>
#endif
之後,可以編譯通過。
2. 編譯之前應當check下機器是否安裝了termcap庫文件,若無的話安裝libncurses5-dev
代碼:
sudo apt-getinstall libncurses5-dev
3.需要安裝xorg-dev
代碼:
sudo apt-getinstall xorg-dev
4. 需要安裝libx11-dev
代碼:
Sudo apt-getinstall libx11-dev
注意:使用gdp的時候不能用開編譯優化
13. 基於VMware的Linux虛擬機硬盤空間擴大
隨着Linux虛擬機的不斷使用,在VMware中經常遇到 預先裝好的 linux 虛擬機的硬盤空間過小 的問題,造成很多軟件不能安裝, 而重新裝一個,又挺麻煩。於是,上網搜了下關於 vmware 硬盤擴容的方法。總結如下:
1、掛載點必須是一個目錄。
2、一個分區掛載在一個已存在的目錄上,這個目錄可以不爲空,但掛載後這個目錄下以前的內容將不可用。
首先使用VMware工具擴容分配的硬盤空間:
1 、 vmware 提供一個命令行工具,vmware-vdiskmanager.exe ,位於 vmware 的安裝目錄下,比如
C:\ProgramFiles\VMware\VMware Workstation\vmware-vdiskmanager.exe.
在 windows 下運行 cmd ,轉到 vmware 的安裝目錄
vmware-vdiskmanager.exe 可以查看幫助
2. 對於擴容,可以輸入下列命令:
vmware-vdiskmanager -x 50Gb"D:\VMware\WinXP\myLinux.vmdk"
注: 要擴容的系統這時不能在運行 ,參數 "-x" 表示要擴展虛擬機硬盤空間,緊隨其後的數字是要擴展到的大小 ( 本例爲擴展到 50GB ,這是一個磁盤總量,包含了原先的磁盤容量 ) 。最後是指定要操作的虛擬機磁盤的具體文件,要是路徑名中有空格,必須以雙引號括起來。按回車鍵開始執行,執行完畢,退出命令提示符窗口,
重啓 VMware ,會發現虛擬機硬盤空間已變成 50GB 了。
我們重啓虛擬機後,發現虛擬機的硬盤是變成50GB 了,但進入 linux 系統後,用 "df -ah" 查看發現硬盤空間還是原先那麼大。
雖然已經擴大了磁盤,但是由於還沒有經過分區,指定文件系統,所以 linux 操作系統無法識別(其實就相當於你的硬盤雖然大了,但是你並沒有對其進行分區是一個道理)。下面我們進行分區處理。
3. 分區:( 這時要切換爲 Root 用戶,Ubuntu下使用sudo命令 )
fdisk 命令: fdisk -l: 打印當前的磁盤分區表,這時我們可以看到磁盤的總量的確增加到 50GB 了,但是分區只有以前的那幾個原有的分區。
鍵入命令: fdisk/dev/sda “sda 就是經過擴容的硬盤,爲SCSI 硬盤, IDE 類型硬盤對應爲 hda ,是對該硬盤進行操作”
鍵入 : m “ 列出 fdisk 的幫助 ”
我們在這裏是要添加一個新分區,即將擴容出來的那部分做成一個新分區,這樣才能被操作系統掛載識別。
鍵入: n ” 命令 n 用於添加新分區"
此時, fdisk 會讓你選擇添加爲邏輯分區呢(編號從 5 開始)還是主分區(編號 1 到 4 )。選擇主分區吧,則鍵入 p ;選擇邏輯分區鍵入 l 。
我們選擇主分區於是:
鍵入: p " 選擇創建主分區 "
此時, fdisk 會讓你選擇主分區的編號,如果已經有了主分區 sda1 , sda2 ,那麼編號就選 3 ,即要創建的該分區爲 sda3.
鍵入: 3
此時, fdisk 又會讓你選擇該分區的開始值這個就是分區的 Start 值( start cylinder );這裏最好直接按回車,
如果您輸入了一個非默認的數字,會造成空間浪費;
此時鍵入: w " 保存所有並退出,分區劃分完畢 "
我們現在還不能用這個分區 , 因 沒格式化 ,這時要重啓系統就能夠在 dev 下面看到 sda3 ,如果不重啓不能進行下面操作
PS: #partprobe 在不重啓的情況下,強制加載新的分區信息。
4. 格式化該新添加的分區:
鍵入: mkfs -t ext3/dev/sda3
或者 mkfs.ext3 /dev/sda3 格式化指定的分區 , 依次類推 , 現在的系統大部分都是 ext3 格式 , 如果你需要其它的 , 可以查看 mkfs 的幫助。
此時我們就可以使用該新增分區啦:
5 、掛載該分區:
手動掛載,則鍵入:sudo mount/dev/sda3 /mnt/sda3 表示將該新分區掛載到 /mnt/sda3 / 這個目錄下面
(注:Ubuntu下默認是掛載到/media對應目錄下,並且手動掛載的信息在/etc/mtab文件下有登記信息)
開機自動掛載,則修改 /etc/fstab文件,在這個文件裏面添加一行:
/dev/sda3 /mnt/sda3 ext3 defaults, 0 2
到這裏就可以使用該新加分區啦 。
PS:
fstab的第五列是表示dump選項,dump工具通過這個選項位置上的數字來決定文件系統是否需要備份。如果是0,dump就會被忽略,事實上,大多數的dump設置都是0。而第六列是fsck選項,fsck命令通過檢測該字段來決定文件系統通過什麼順序來掃描檢查,根文件系統/對應該字段的值應該爲1,其他文件系統應該爲2。若文件系統無需在啓動時掃描檢查,則設置該字段爲0。