編譯方法:格式 gcc [option] [sourcefilename]常用的選項(xiàng)最簡單的是:gcc hello.c默認(rèn)的情況下將生成a.out的可執(zhí)行性文件,
我們一直強(qiáng)調(diào)成都做網(wǎng)站、成都網(wǎng)站制作對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站建設(shè)公司不一定是大公司,成都創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
只需要在終端上輸入./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í)行文件。
采用交叉編譯的主要原因在于,多數(shù)嵌入式目標(biāo)系統(tǒng)不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉(zhuǎn)移到高性能的主機(jī)中進(jìn)行。
linux下的交叉編譯環(huán)境重要包括以下幾個部分:
1.對目標(biāo)系統(tǒng)的編譯器gcc
2.對目標(biāo)系統(tǒng)的二進(jìn)制工具binutils
3.目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫glibc
4.目標(biāo)系統(tǒng)的linux內(nèi)核頭文件
交叉編譯環(huán)境的建立步驟
一、下載源代碼 下載包括binutils、gcc、glibc及l(fā)inux內(nèi)核的源代碼(需要注意的是,glibc和內(nèi)核源代碼的版本必須與目標(biāo)機(jī)上實(shí)際使用的版本保持一致),并設(shè)定shell變量PREFIX指定可執(zhí)行程序的安裝路徑。
二、編譯binutils 首先運(yùn)行configure文件,并使用--prefix=$PREFIX參數(shù)指定安裝路徑,使用--target=arm-linux參數(shù)指定目標(biāo)機(jī)類型,然后執(zhí)行make install。
三、配置linux內(nèi)核頭文件
首先執(zhí)行make mrproper進(jìn)行清理工作,然后執(zhí)行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進(jìn)行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構(gòu),因?yàn)槿笔〖軜?gòu)為主機(jī)的cpu架構(gòu)),這一步需要根據(jù)目標(biāo)機(jī)的實(shí)際情況進(jìn)行詳細(xì)的配置,筆者進(jìn)行的實(shí)驗(yàn)中目標(biāo)機(jī)為HP的ipaq-hp3630 PDA,因而設(shè)置system type為SA11X0,SA11X0 Implementations中選擇Compaq iPAQ H3600/H3700。
配置完成之后,需要將內(nèi)核頭文件拷貝到安裝目錄: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
四、第一次編譯gcc
首先運(yùn)行configure文件,使用--prefix=$PREFIX參數(shù)指定安裝路徑,使用--target=arm-linux參數(shù)指定目標(biāo)機(jī)類型,并使用--disable-threads、--disable-shared、--enable-languages=c參數(shù),然后執(zhí)行make install。這一步將生成一個最簡的gcc。由于編譯整個gcc是需要目標(biāo)機(jī)的glibc庫的,它現(xiàn)在還不存在,因此需要首先生成一個最簡的gcc,它只需要具備編譯目標(biāo)機(jī)glibc庫的能力即可。
五、交叉編譯glibc
這一步驟生成的代碼是針對目標(biāo)機(jī)cpu的,因此它屬于一個交叉編譯過程。該過程要用到linux內(nèi)核頭文件,默認(rèn)路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個名為sys-linux的軟連接,使其內(nèi)核頭文件所在的include目錄;或者,也可以在接下來要執(zhí)行的configure命令中使用--with-headers參數(shù)指定linux內(nèi)核頭文件的實(shí)際路徑。
configure的運(yùn)行參數(shù)設(shè)置如下(因?yàn)槭墙徊婢幾g,所以要將編譯器變量CC設(shè)為arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置執(zhí)行configure和make install,glibc的交叉編譯過程就算完成了,這里需要指出的是,glibc的安裝路徑設(shè)置為$PREFIXARCH=arm/arm-linux,如果此處設(shè)置不當(dāng),第二次編譯gcc時可能找不到glibc的頭文件和庫。
六、第二次編譯gcc
運(yùn)行configure,參數(shù)設(shè)置為--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。
運(yùn)行make install。
到此為止整個交叉編譯環(huán)境就完全生成了。
幾點(diǎn)注意事項(xiàng)
第一點(diǎn)、在第一次編譯gcc的時候可能會出現(xiàn)找不到stdio.h的錯誤,解決辦法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS變量的設(shè)定中增加-Dinhibit_libc和-D__gthr_posix_h。
Linux編譯安裝相關(guān)命令,下面以Linux安裝MySQL工具為例進(jìn)行說明,代碼如下:
1、測試環(huán)境在Linux MySQL下進(jìn)行,版本系統(tǒng)為CentOS5,以下為相關(guān)軟件:
mysql-5.1.30
memcached-1.2.6
libevent-1.4.7-stable
memcached_functions_mysql-0.8
libmemcached-0.26
2、編譯安裝Linux MySQL
[root@localhost?~]#tar?xzf?mysql-5.1.30.tar_001.gz??
[root@localhost?~]#cd?mysql-5.1.30??
[root@localhost?~]#./configure?--prefix=/usr/local/mysql51??
[root@localhost?~]#make??
[root@localhost?~]#make?install??
[root@localhost?~]#./scripts/mysql_install_db?--user=mysql?--skip-name-resolve??
[root@localhost?~]#/usr/local/mysql51/bin/mysqld_safe?
#連接符這是放入后臺,是前一個正確執(zhí)行,才會執(zhí)行后一個
#Linux編譯安裝流程./configure??make??make?install(默認(rèn)目錄安裝)
#./configure?--prefix=/usr/local/pcre??make??make?install(指定安裝目錄)
linux終端下,編譯C語言程序步驟為:
采用vi進(jìn)行源代碼編寫,編寫完成后,:wq存盤退出,如:
vi test.c
在命令行下,運(yùn)行g(shù)cc編譯程序,生成執(zhí)行碼,如:
gcc ?-o test test.c
-o 表示指明生成的執(zhí)行碼名稱
運(yùn)行編譯后的執(zhí)行碼
./test
格式 gcc [option] [sourcefilename]
介紹一些常用的選項(xiàng):最簡單的是:gcc hello.c
默認(rèn)的情況下將生成a.out的可執(zhí)行性文件,你只需要在終端上輸入./a.out就可以看到執(zhí)行的結(jié)果.
如果你想指定生成目標(biāo)文件的名字那么你可以加上 -o選項(xiàng),命令如下:
gcc -o hello hello.c
命令如下:
gcc -c hello hello.c
1、首先在linux下判斷是否安裝gcc編譯器,直接執(zhí)行:gcc -v,判斷是否安裝gcc。
2、然后需要在代碼框內(nèi)寫一個簡單的C源程序。
3、在程序中使用了C語言中的數(shù)學(xué)開方函數(shù),sqrt(),所以需要引入math.h頭文件。
4、寫完源程序之后,我們對其進(jìn)行編譯,如果使用通常的編譯語句,【gcc math.c -o math】進(jìn)行編譯,會出現(xiàn)錯誤;大概的意思就是不認(rèn)識sqrt這個東西。
5、所以需要使用正確的命令:【gcc math.c -lm -o math】;這樣才能編譯正確。