編譯方法:格式 gcc [option] [sourcefilename]常用的選項(xiàng)最簡單的是:gcc hello.c默認(rèn)的情況下將生成a.out的可執(zhí)行性文件,
創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為湖口等服務(wù)建站,湖口等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為湖口企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
只需要在終端上輸入./a.out就可以看到執(zhí)行的結(jié)果,如果你想指定生成目標(biāo)文件的名字那么你可以加上 -o選項(xiàng),命令如下:gcc -o hello hello.c
命令:gcc -c hello hello.c
擴(kuò)展資料:
gcc命令的基本用法
gcc[options]?[filenames] ?
其中,filenames為文件名;options為編譯選項(xiàng)。
當(dāng)不使用任何編譯選項(xiàng)編譯hello.c時,gcc將會自動編譯產(chǎn)生一個a.out的可執(zhí)行文件:
[root@localhost?c]#?ls ?
hello.c ?
[root@localhost?c]#?gcc?hello.c ?
[root@localhost?c]#?ls ?
a.out??hello.c?
執(zhí)行:
[root@localhost?c]#?./a.out ?
Hello,?World!?
使用-o編譯選擇,可以為編譯后的文件指定一個名字:
[root@localhost?c]#?ls ?
a.out??hello.c ?
[root@localhost?c]#?gcc?hello.c?-o?hello ?
[root@localhost?c]#?ls ?
a.out??hello??hello.c ?
執(zhí)行:
[root@localhost?c]#?./hello ?
Hello,?World!?
注意:使用-o選項(xiàng)時,-o后面必須跟一個文件名,即:-o outfile。
為了便于描述后面的選項(xiàng),刪除hello和a.out可執(zhí)行文件。
詳解linux源碼包安裝過程
1. 解壓縮包
可以通過下載或其他方式獲得了一個軟件包,通常它是一個壓縮文件,大部分可能是存檔的和壓縮的,這些文件一般以 .tar .gz為擴(kuò)展名。
首先拷貝它到一個目錄,然后 untar 和 gunzip 解壓它。 通常這個命令是
tar xzvf filename [filename 是軟件文件名稱]
解壓后的文件一般會在當(dāng)前目錄下的創(chuàng)建子目錄,并以這個包名來命名。 你也可以用用這個命令預(yù)先查看結(jié)果 tar tzvf filename,顯示包里有那些解壓文件。
源文件如果是新的 bzip2 (.bz2) 格式,可用
bzip2 -cd filename | tar xvf -,或更簡單的 tar xyvf filename ,這很不錯的tar命令被不斷的完善。
說明:
A:有時候一些文件必須安裝在用戶的 home 目錄下,或更多的是在一個固定的目錄,比如 /, /usr/src, 或 /opt 。所以必須仔細(xì)閱讀安裝包的配置信息。當(dāng)一個軟件包里如果有config 和 Makefiles 文件則最好去編輯它,這里包括了安裝指令和說明。提示:你改變 makefile 會導(dǎo)致不同的結(jié)果。大部分軟件包允許用 make install 自動處理安置二進(jìn)制文件在適當(dāng)?shù)南到y(tǒng)位置。
B:你可能碰到過一些共享文件、shell 存檔文件、尤其是 Internet 上的源碼新聞組。它們保留的原因是具有人性化的可讀性,并且允許新聞組緩沖并通過它們篩選和剔除出不合格的。它們可能用 unshar filename.shar 命令來解壓。
C: 一些源碼存檔文件是用非標(biāo)準(zhǔn)的 DOS,Mac 或其他壓縮的比如:
zip, arc, lha, arj, zoo, rar, and shk.
D: 有時候,你可能需要使用一個 patch 或顯示改變了的 diff 文件來升級或修復(fù)存檔的源碼文件。這 doc 文件或者 README 文件將告訴你怎么去使用。一個很好的命令用標(biāo)準(zhǔn)語法來調(diào)用的命令是 patch patchfile.
2: 關(guān)于 rpm 安裝包
一些 Linux 用戶懼怕通過使用源碼來手動安裝軟件包,不過現(xiàn)在有方便的 rpm 和 deb 或 新格式的 slp 包。例如:rpm 安裝運(yùn)行平穩(wěn)又快,作為一個軟件安裝在某幾個有名的操作系統(tǒng)。
作為方便的RPM包也存在很多不好的缺點(diǎn),例如:
A: 要了解軟件中更多更詳細(xì)的內(nèi)容你必須去在二進(jìn)制中去了解,而不是rpm包。
B: 還有安裝一個 rpm 包如果需要依賴關(guān)系那么安裝就可能會導(dǎo)致失敗。
C: 當(dāng) rpm 請求你系統(tǒng)中不同版本的庫,那么安裝將不能繼續(xù),除非你為錯誤的庫位置創(chuàng)建連接符號到正確的位置。
說明:必須使用root 安裝 rpm 和 deb 。因?yàn)樗枰仨毜膶懭霗?quán)限。
最簡單的,用命令 rpm -i packagename.rpm 和 dpkg --install packagename.deb 會自動解包和安裝。
3:關(guān)于安裝 Linux 包出現(xiàn)的一些問題及解決方案
假設(shè) make 失敗有個鏈接錯誤: -lX11: No such file or directory,正好在 xmkmf 之后已被調(diào)用,這可能意味著 Imake 不能被完全建立。檢查第一部分 Makefile 文件的的行是這樣:
· LIB= -L/usr/X11/lib
· INCLUDE= -I/usr/X11/include/X11
· LIBS= -lX11 -lc -lm
這個 -L 和 -I 開關(guān)告訴編譯器和鏈接分別在哪里找到 library 和 include 文件。在這個例子里, X11 庫應(yīng)該在 /usr/X11/lib 目錄,且 X11 包含文件應(yīng)該在 /usr/X11/include/X11 目錄里。假如對于你的機(jī)器上的這個錯誤,請?zhí)幚硇薷?Makefile 并重新再 make。
沒有聲明涉及的數(shù)學(xué)庫函數(shù),像下列各項(xiàng):
/tmp/cca011551.o(.text 0x11): undefined reference to `cos'
要修復(fù)它,需要明確鏈接到匹配的庫,在 Makefile (看先前的例子) 里增加一個 -lm 到 LIB 或 LIBS 標(biāo)記 。
用其他方法嘗試
仍然失敗 如果失敗,參考下列腳本:
make -DUseInstalled -I/usr/X386/lib/X11/config
這個直接方式的類別相當(dāng)于。
在少數(shù)例子里,用 root 運(yùn)行 ldconfig 可能會解決:
# ldconfig 更新共享庫鏈接符號。
一些 Makefiles 使用你系統(tǒng)里未被承認(rèn)的庫別名。一個例子,構(gòu)建可能需要 libX11.so.6 ,但是在 /usr/X11R6/lib 不存在文件或鏈接。然而,在那里是 libX11.so.6.1。解決方法是用 root 運(yùn)行l(wèi)n -s /usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/lib/libX11.so.6 ,接著需要運(yùn)行 ldconfig 。
有一些包需要你安裝一個或更多庫的升級版本。需要拷貝一個或更多的庫到適當(dāng)?shù)哪夸浝铮瑒h除舊的庫,重新設(shè)置動態(tài)鏈接庫。
4:一些其他的問題處理
安裝一個shell 腳本如果出現(xiàn):No such file or directory 的錯誤消息。這是可以檢查文件權(quán)限確定文件事可執(zhí)行的,并檢查文件頭確定是否 shell 或程序是腳本在指定的位置被調(diào)用。一個例子,這個腳本可能是這樣開始的:
#!/usr/local/bin/EDEN
如EDEN的實(shí)際安裝位置是在你的 /usr/bin 目錄,用一個 /usr/local/bin 替代
這個腳本不能運(yùn)行有兩個方法來糾正??!
A: 文件頭改成 #!/usr/bin/EDEN
B: 或增加一個鏈接符, ln -s /usr/bin/EDEN
5:一個典型的例子 Xloadimage
首先說明下面的例子來源于國外網(wǎng)站的一個技術(shù)實(shí)例,這里我做了翻譯和整理。
這個例子展現(xiàn)一個簡單的問題。xloadimage 程序?qū)ξ业膱D形工具的調(diào)整設(shè)置是有用的附加。從源碼目錄拷貝文件,用 tar xzvf 解壓文件,可是在運(yùn)行 make 的時候出現(xiàn)令人討厭的錯誤并停止了。
gcc -c -O -fstrength-reduce -finline-functions -fforce-mem
-fforce-addr -DSYSV -I/usr/X11R6/include
-DSYSPATHFILE=\"/usr/lib/X11/Xloadimage\" mcidas.c
In file included from /usr/include/stdlib.h:32,
from image.h:23,
from xloadimage.h:15,
from mcidas.c:7:
/usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:
conflicting types for `wchar_t'
/usr/X11R6/include/X11/Xlib.h:74: previous declaration of
`wchar_t'
make[1]: *** [mcidas.o] Error 1
make[1]: Leaving directory
`/home/thegrendel/tst/xloadimage.4.1'
make: *** [default] Error 2
這個錯誤消息包含了實(shí)質(zhì)的線索:
查看 image.h 文件的 23 行:
#include stdlib.h
在源碼的某處對于 xloadimage, wchar_t 已經(jīng)在指定標(biāo)準(zhǔn) include 文件重新定義。 告訴我們首先在 image.h 的 23 行嘗試注釋它,或許 stdlib.h include 是不存在的,畢竟不是所有都是必需的。
在這點(diǎn),構(gòu)建中的收益來源于所有任何一個致命錯誤。xloadimage 現(xiàn)在功能正常。
6: 安裝 Linux 包的一些總結(jié)
堅持自己動手處理所有的安裝出現(xiàn)的問題,不斷總結(jié)努力學(xué)習(xí),從錯誤里去仔細(xì)研究,努力動手排錯,從每個不足甚至失敗的地方得到擴(kuò)充和提升,可以增強(qiáng)安裝構(gòu)建軟件的技巧。
make是用來編譯的,它從Makefile中讀取指令,然后編譯。
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
用法:
1、make:
這一步就是編譯,大多數(shù)的源代碼包都經(jīng)過這一步進(jìn)行編譯(當(dāng)然有些perl或python編寫的軟件需要調(diào)用perl或python來進(jìn)行編譯)。
如果 在 make 過程中出現(xiàn) error ,就要記下錯誤代碼(注意不僅僅是最后一行),然后可以向開發(fā)者提交 bugreport(一般在 INSTALL 里有提交地址)。
或者系統(tǒng)少了一些依賴庫等,這些需要自己仔細(xì)研究錯誤代碼。
make 的作用是開始進(jìn)行源代碼編譯,以及一些功能的提供,這些功能由他的 Makefile 設(shè)置文件提供相關(guān)的功能。
比如 make install 一般表示進(jìn)行安裝,make uninstall 是卸載,不加參數(shù)就是默認(rèn)的進(jìn)行源代碼編譯。
make 是 Linux 開發(fā)套件里面自動化編譯的一個控制程序,他通過借助 Makefile 里面編寫的編譯規(guī)范進(jìn)行自動化的調(diào)用 gcc 、ld 以及運(yùn)行某些需要的程序進(jìn)行編譯的程序。
一般情況下,他所使用的 Makefile 控制代碼,由 configure 這個設(shè)置腳本根據(jù)給定的參數(shù)和系統(tǒng)環(huán)境生成。
2、make install
這條命令來進(jìn)行安裝(當(dāng)然有些軟件需要先運(yùn)行 make check 或 make test來進(jìn)行一些測試),這一步一般需要你有 root 權(quán)限(因?yàn)橐蛳到y(tǒng)寫入文件)。
擴(kuò)展資料
當(dāng)我們在使用make命令時,常常會在make后面加上其他單詞,比如check,install,installcheck…這些單詞都是make的參數(shù),我們稱之為“目標(biāo)(targets)”。
最常見的幾個目標(biāo):
make all:編譯程序、庫、文檔等(等同于make)
make install:安裝已經(jīng)編譯好的程序。復(fù)制文件樹中到文件到指定的位置
make unistall:卸載已經(jīng)安裝的程序。
make clean:刪除由make命令產(chǎn)生的文件
make distclean:刪除由./configure產(chǎn)生的文件
make check:測試剛剛編譯的軟件(某些程序可能不支持)
make installcheck:檢查安裝的庫和程序(某些程序可能不支持)
make dist:重新打包成packname-version.tar.gz
Linux必學(xué)的60個命令:
安裝和登錄命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
文件處理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
系統(tǒng)管理相關(guān)命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
網(wǎng)絡(luò)操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
系統(tǒng)安全相關(guān)命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
Linux的優(yōu)點(diǎn)
1、Linux由眾多微內(nèi)核組成,其源代碼完全開源;
2、Linux繼承了Unix的特性,具有非常強(qiáng)大的網(wǎng)絡(luò)功能,其支持所有的因特網(wǎng)協(xié)議,包括TCP/IPv4、TCP/IPv6和鏈路層拓?fù)涑绦虻?,且可以利用Unix的網(wǎng)絡(luò)特性開發(fā)出新的協(xié)議棧;
3、Linux系統(tǒng)工具鏈完整,簡單操作就可以配置出合適的開發(fā)環(huán)境,可以簡化開發(fā)過程,減少開發(fā)中仿真工具的障礙,使系統(tǒng)具有較強(qiáng)的移植性;