




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章
Linux系統(tǒng)C語言開發(fā)工具2本章重點(diǎn)
Linux環(huán)境中將C程序轉(zhuǎn)換成可執(zhí)行文件所經(jīng)歷的過程和命令
gcc、make、gdb工具的使用233.1第一個(gè)LinuxC程序
例3-1:設(shè)計(jì)一個(gè)程序,在屏幕打印5行“HELLO,LINUXWORLD”。
步驟1:設(shè)計(jì)編輯源程序代碼編輯程序只需要用文本編輯器vim,編輯程序在終端中輸出: [root@localhostroot]#vim3-1.c
/*3-1.c程序:在屏幕上輸出“這是第一個(gè)Linuxc程序!”*/#include<stdio.h>/*文件預(yù)處理,包含標(biāo)準(zhǔn)輸入輸出庫(kù)*/intmain()/*C程序的主函數(shù),開始入口*/{
inti,j;for(i=0,j=5;i<j;i++){ printf("HELLO,LINUXWORLD\n"); exit(0)}return0;}輸入完成后存盤:按ESC鍵→輸入“:wq”回車
343.1第一個(gè)Linuxc程序步驟2:編譯程序編譯程序前,最好請(qǐng)確認(rèn)c源程序文件的存在,打開Linux終端輸入“l(fā)s”命令,查看當(dāng)前目錄下是否有3-1.c文件;輸入命令:[root@localhostroot]#gcc3-1.c;若編譯時(shí)沒有出現(xiàn)錯(cuò)誤信息,說明程序編譯成功。步驟3:運(yùn)行程序編譯好3-1.c程序后,默認(rèn)生成的可執(zhí)行文件是a.out;輸入命令:[root@localhostroot]#./a.out此時(shí)系統(tǒng)會(huì)出現(xiàn)運(yùn)行結(jié)果。43.2.1gcc編譯器gcc是(GNUCmpilerCollection的簡(jiǎn)稱),它是GNU項(xiàng)目中符合ANSIC標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用C、C++和ObjectC等語言編寫的程序。cc命令可以啟動(dòng)C編譯系統(tǒng),當(dāng)執(zhí)行g(shù)cc時(shí),它將完成預(yù)處理、編譯、匯編和連接4個(gè)步驟并最終生成可執(zhí)行代碼。產(chǎn)生的可執(zhí)行程序默認(rèn)被保存為a.out文件。gcc命令可以接受多種文件類型并依據(jù)用戶指定的命令行參數(shù)對(duì)它們做出相應(yīng)處理。如果gcc無法根據(jù)一個(gè)文件的擴(kuò)展名決定它的類型,它將假定這個(gè)文件是一個(gè)目標(biāo)文件或庫(kù)文件。563.2.1gcc編譯器gcc編譯流程673.2.1gcc編譯器gcc支持編譯的一些源文件的后綴及其解釋783.2.1gcc編譯器gcc命令語法:gcc[參數(shù)]要編譯的文件[參數(shù)][目標(biāo)文件]
目標(biāo)文件可省略,gcc默認(rèn)生成可執(zhí)行的文件為a.out,如果想要生成自己命名的可執(zhí)行文件,通常使用“-o”參數(shù)。
[root@localhostroot]#gcc3-1.c–o3-1
83.2.1gcc編譯器例3-2:設(shè)計(jì)一個(gè)程序,要求把輸入的百分制的成績(jī)轉(zhuǎn)換成五級(jí)制輸出。即輸入成績(jī)大于等于90分,顯示“優(yōu)秀”;若成績(jī)介于80~90分,顯示“良好”;若成績(jī)介于70~80分,顯示“中等”;若成績(jī)介于60~70分,顯示“及格”;若成績(jī)小于60分,顯示“不及格”。9103.2.1gcc編譯器步驟1:編輯源程序代碼[root@localhostroot]#vim3-2.c10113.2.1gcc編譯器步驟2:用gcc編譯程序[root@localhostroot]#gcc3-2.c–o3-2步驟3:運(yùn)行程序[root@localhostroot]#./3-2思考題:設(shè)計(jì)一個(gè)程序,要求輸入一個(gè)數(shù),如果此數(shù)大于0,顯示“輸入的為正數(shù)”,否則顯示“輸入的為負(fù)數(shù)”。113.2.2函數(shù)庫(kù)標(biāo)準(zhǔn)系統(tǒng)庫(kù)文件一般存放在linux文件系統(tǒng)/lib和/usr/lib目錄中。C語言編譯器需要知道要搜索哪些庫(kù)文件,默認(rèn)情況下,它只搜索標(biāo)準(zhǔn)C語言庫(kù)。庫(kù)文件必須遵循特定的命名規(guī)范并且需要在命令行中明確指定。庫(kù)文件的名字總是以lib開頭,隨后的部分指明這是什么庫(kù)(例如,c代表C語言庫(kù),m代表數(shù)學(xué)庫(kù))。文件名的最后部分以.開始,然后給出庫(kù)文件的類型:
.a代表傳統(tǒng)的靜態(tài)函數(shù)庫(kù)
.so代表共享函數(shù)庫(kù) 例如:libm.a為靜態(tài)數(shù)學(xué)函數(shù)庫(kù)。123.2.2函數(shù)庫(kù)1.靜態(tài)庫(kù)靜態(tài)庫(kù),也稱作歸檔庫(kù)(archive),按慣例它們的文件名都以.a結(jié)尾。比如,標(biāo)準(zhǔn)C語言函數(shù)庫(kù)/usr/lib/libc.a和X11函數(shù)庫(kù)/usr/X11/lib/libX11.a。創(chuàng)建和維護(hù)自己的靜態(tài)庫(kù):只要使用ar(代表archive,即建立歸檔文件)程序和gcc-c命令對(duì)函數(shù)分別進(jìn)行編譯。應(yīng)該盡可能把函數(shù)分別保存到不同的源文件中。如果函數(shù)需要訪問公共數(shù)據(jù),則把它們放在同一個(gè)源文件中并使用在該文件中聲明的靜態(tài)變量。133.2.2函數(shù)庫(kù)例3.5:創(chuàng)建一個(gè)小型函數(shù)庫(kù),它包含兩個(gè)函數(shù)pro1和pro2,然后在一個(gè)示例程序中調(diào)用其中一個(gè)函數(shù)。步驟1為兩個(gè)函數(shù)分別創(chuàng)建各自的源文件(將它們分別命名為pro1.c和pro2.c)。[root@localhostroot]#catpro1.c#include<sdtio.h>voidpro1(intarg){ printf(“hello:%d\n”,arg);}[root@localhostroot]#catpro2.c#include<sdtio.h>voidpro2(char*arg){
printf(“您好:%s\n”,arg);}143.2.2函數(shù)庫(kù)步驟2分別編譯這兩個(gè)函數(shù),產(chǎn)生要包含在庫(kù)文件中的目標(biāo)文件。通過調(diào)用帶有-c選項(xiàng)的gcc編譯器來實(shí)現(xiàn),-c選項(xiàng)的作用是阻止編譯器創(chuàng)建一個(gè)完整的程序,gcc將把源程序編譯成目標(biāo)程序,文件名為以.o結(jié)尾。如果此時(shí)試圖創(chuàng)建一個(gè)完整的程序?qū)⒉粫?huì)成功,因?yàn)檫€未定義main函數(shù)。[root@localhostroot]#gcc-cpro1.cpro2.c[root@localhostroot]#ls*.opro1.opro2.o步驟3編寫一個(gè)調(diào)用pro2函數(shù)的程序。首先,為庫(kù)文件創(chuàng)建一個(gè)頭文件lib.h。這個(gè)頭文件將聲明庫(kù)文件中的函數(shù),它應(yīng)該被所有希望使用庫(kù)文件的應(yīng)用程序所包含。[root@localhostroot]#catlib.h/*lib.h:pro1.c,pro2.c*/voidpro1(int);voidpro2(char*);153.2.2函數(shù)庫(kù)步驟4主程序(program.c),它包含庫(kù)的頭文件并且調(diào)用庫(kù)中的一個(gè)函數(shù)。[root@localhostroot]#catprogram.c#include“l(fā)ib.h”intmain(){ pro2(“Linuxworld”); exit(0);}步驟5編譯并測(cè)試程序。暫時(shí)為編譯器顯式指定目標(biāo)文件,然后要求編譯器編譯的文件并將其與預(yù)先編譯好的目標(biāo)模塊pro2.o鏈接。[root@localhostroot]#gcc-cprogram.c[root@localhostroot]#gcc-oprogramprogram.opro2.o[root@localhostroot]#./program您好:Linuxworld163.2.2函數(shù)庫(kù)步驟6創(chuàng)建并使用一個(gè)庫(kù)文件。用ar程序創(chuàng)建一個(gè)歸檔文件并將目標(biāo)文件添加進(jìn)去。這個(gè)程序之所以稱為ar,是因?yàn)樗鼘⑷舾蓡为?dú)的文件歸并到一個(gè)大的文件中以創(chuàng)建歸檔文件。注意,也可以用ar程序來創(chuàng)建任何類型文件的歸檔文件。[root@localhostroot]#arcrvlibfoo.apro1.opro2.o函數(shù)庫(kù)就可使用了。173.2.2函數(shù)庫(kù)可以在編譯器命令行的文件列表中添加該庫(kù)文件以創(chuàng)建程序:[root@localhostroot]#gcc-oprogramprogram.olibfoo.a[root@localhostroot]#./program您好:Linuxworld也可以用-l選項(xiàng)來訪問函數(shù)庫(kù),但是因?yàn)槠湮幢4嬖跇?biāo)準(zhǔn)位置,所以必須用-L選項(xiàng)來指示gcc在何處可以找到它:[root@localhostroot]#gcc-oprogramprogram.o-L.-lfoo-L.選項(xiàng)指示編譯器在當(dāng)前目錄”.”中查找函數(shù)庫(kù)。-lfoo選項(xiàng)指示編譯器使用名為libfoo.a的函數(shù)庫(kù)(或者名為libfoo.so的共享庫(kù),如果它存在的話)。183.2.2函數(shù)庫(kù)2.共享庫(kù)靜態(tài)庫(kù)的一個(gè)缺點(diǎn),當(dāng)同時(shí)運(yùn)行許多應(yīng)用程序并且它們都使用來自同一個(gè)函數(shù)庫(kù)的函數(shù)時(shí),就會(huì)在內(nèi)存中有同一函數(shù)的多份拷貝,在程序文件自身中也有多份同樣的拷貝。這將消耗大量寶貴的內(nèi)存和磁盤空間??梢杂霉蚕韼?kù)來實(shí)現(xiàn)函數(shù)的動(dòng)態(tài)鏈接。Linux支持共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))。共享庫(kù)的保存位置與靜態(tài)庫(kù)是一樣的,但共享庫(kù)有不同的文件名后綴。在典型的Linux系統(tǒng)中,標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)的共享庫(kù)是/usr/lib/libm.so。程序使用共享庫(kù)時(shí),它的鏈接方式是這樣的:它本身不再包含函數(shù)代碼,而是運(yùn)行時(shí)可訪問的共享代碼。當(dāng)編譯好的程序被裝載到內(nèi)存中執(zhí)行時(shí),函數(shù)引用被解析并產(chǎn)生對(duì)共享庫(kù)的調(diào)用,如果有必要共享庫(kù)才被加載到內(nèi)存中。193.3make工具Linux有個(gè)很強(qiáng)大的工具make,它可以管理多個(gè)模塊。make工具提供靈活的機(jī)制來建立大型的軟件項(xiàng)目。make工具依賴于一個(gè)特殊的、名字為makefile或Makefile的文件,這個(gè)文件描述了系統(tǒng)中各個(gè)模塊之間的依賴關(guān)系。系統(tǒng)中部分文件改變時(shí),make根據(jù)這些關(guān)系決定一個(gè)需要重新編譯的文件的最小集合。如果軟件包括幾十個(gè)源文件和多個(gè)可執(zhí)行文件,這時(shí)make工具特別有用。203.3.1make命令命令語法:make[選項(xiàng)][目標(biāo)][宏定義]常用選項(xiàng):-d 顯示調(diào)試信息-f文件 告訴make使用指定文件作為依賴關(guān)系文件。-n 不執(zhí)行makefile中的命令,只顯示輸出這些命令-s 執(zhí)行但不顯示任何信息。213.3.2make規(guī)則makefile的默認(rèn)文件名為GNUmakefile、makefile或Makefile,當(dāng)然也可以在make的命令行中指定別的文件名。多數(shù)Linux程序員使用第三種文件名Makefile。Makefile中包含一些規(guī)則來告訴make處理哪些文件以及如何處理這些文件。這些規(guī)則主要是描述哪些文件(稱為target目標(biāo)文件,不要和編譯時(shí)產(chǎn)生的目標(biāo)文件相混淆)是從哪些別的文件(稱為dependency依賴文件)中產(chǎn)生的,以及用什么命令(command)來執(zhí)行這個(gè)過程。依靠這些信息,make會(huì)對(duì)磁盤上的文件進(jìn)行檢查,如果目標(biāo)文件的生成或被改動(dòng)時(shí)的時(shí)間(稱為該文件時(shí)間戳)至少比它的一個(gè)依賴文件還舊的話,make就執(zhí)行相應(yīng)的命令,以更新目標(biāo)文件。目標(biāo)文件不一定是最后的可執(zhí)行文件,可以是任何一個(gè)中間文件并可以作為其他目標(biāo)文件的依賴文件。223.3.2make規(guī)則一個(gè)Makefile文件主要含有一系列的make規(guī)則,每條make規(guī)則包含以下內(nèi)容:目標(biāo)文件列表:依賴文件列表<TAB>命令列表目標(biāo)文件列表:即make最終需要?jiǎng)?chuàng)建的文件,中間用空格隔開,如可執(zhí)行文件和目標(biāo)文件;也可以是要執(zhí)行的動(dòng)作。依賴文件列表:是編譯目標(biāo)文件所需要的其他文件。命令(command)列表:是make執(zhí)行的動(dòng)作,通常是把指定的相關(guān)文件編譯成目標(biāo)文件的編譯命令,每個(gè)命令占一行,且每個(gè)命令行的起始字符必須為TAB字符。
除非特別指定,否則make的工作目錄就是當(dāng)前目錄。233.3.2make規(guī)則例3.6:Makefile文件實(shí)例[root@localhostroot]#catMakefile#一個(gè)簡(jiǎn)單的Makefile的例子,以#開頭的為注釋行test:prog.ocode.o gcc-otestprog.ocode.o
prog.o:prog.cprog.hcode.h gcc-cprog.c-oprog.o
code.o:code.ccode.h gcc-ccode.c-ocode.o
clean: rm-f*.o243.3.2make規(guī)則調(diào)用make命令:[root@localhostroot]#maketargettarget是Makefile文件中定義的目標(biāo)之一,如果省略target,make就將生成Makefile文件中定義的第一個(gè)目標(biāo)。對(duì)于例3.6,單獨(dú)的一個(gè)“make”命令等價(jià)于:[root@localhostroot]#maketest253.3.3Makefile中的變量Makefile里的變量就像一個(gè)環(huán)境變量。事實(shí)上,環(huán)境變量在make中也被解釋成make的變量。這些變量對(duì)大小寫敏感,一般使用大寫宇母。Makefile中的變量是用一個(gè)字符串在Makefile中定義的,這個(gè)字符串就是變量的值。定義變量的語法:VARNAME=string引用變量的值:${VARNAME}make解釋規(guī)則時(shí),VARNAME在等式右端展開為定義它的字符串。變量一般都在Makefile的前面部分定義。按照慣例,所有的Makefile變量都應(yīng)該是大寫。如果變量的值發(fā)生變化,就只需要在一個(gè)地方修改,從而簡(jiǎn)化了Makefile的維護(hù)。263.3.3Makefile中的變量利用變量重寫前面的Makefile:OBJS=prog.ocode.oCC=gcc
test:${OBJS} ${CC}-otest${OBJS}
prog.o:prog.cprog.hcode.h ${CC}-cprog.c-oprog.o
code.o:code.ccode.h ${CC}-ccode.c-ocode.o
clean: rm-f*.o273.3.3Makefile中的變量環(huán)境變量:使用方法很簡(jiǎn)單,在make啟動(dòng)時(shí),make讀取系統(tǒng)當(dāng)前已定義的環(huán)境變量,并且創(chuàng)建與之同名同值的變量,因此用戶可以像在shell中一樣在Makefile中方便的引用環(huán)境變量。需要注意的是,如果用戶在Makefile中定義了同名的變量,用戶自定義變量將覆蓋同名的環(huán)境變量。此外,Makefile中還有一些預(yù)定義變量和自動(dòng)變量,但是看起來并不像自定義變量那樣直觀。283.4gdb調(diào)試工具上面例子,可以簡(jiǎn)化為:OBJS=prog.ocode.oCC=gcctest:${OBJS} ${CC}-o$@$^prog.o:prog.cprog.hcode.hcode.o:code.ccode.h
clean: rm-f*.o293.4gdb調(diào)試工具Linux下的gdb調(diào)試器,是一款GNU組織開發(fā)并發(fā)布的UNIX/Linux下的程序調(diào)試工具。雖然它沒有圖形化的友好界面,但是它強(qiáng)大的功能,足以與很多商業(yè)化的集成開發(fā)工具相媲美。在進(jìn)行應(yīng)用程序的調(diào)試之前,要注意的是gdb進(jìn)行調(diào)試的是可執(zhí)行文件,而不是如“.c”這樣的源代碼文件。因此,需要先通過gcc編譯生成可執(zhí)行文件才能用gdb進(jìn)行調(diào)試。303.4gdb調(diào)試工具命令語法:gdb[選項(xiàng)][可執(zhí)行程序[core文件|進(jìn)程ID]]功能:跟蹤指定程序的運(yùn)行,給出它的內(nèi)部運(yùn)行狀態(tài)以協(xié)助你定位程序中的錯(cuò)誤。你還可以指定一個(gè)程序運(yùn)行錯(cuò)誤產(chǎn)生的core文件,或者正在運(yùn)行的程序進(jìn)程ID。常用選項(xiàng):-ccore文件 使用指定core文件檢查程序。-h 列出命令行選項(xiàng)的簡(jiǎn)要介紹。-n 忽略~/.gdbinit文件中指定的執(zhí)行命令。-q 禁止顯示介紹信息和版權(quán)信息。-s文件 使用保存在指定文件中的符號(hào)表。313.4gdb調(diào)試工具啟動(dòng)gdb:要使用gdb調(diào)試程序,必須使用-g參數(shù)重新編譯該程序。此選項(xiàng)用于生成包含符號(hào)表和調(diào)試信息的可執(zhí)行文件。程序成功編譯以后,就可以使用gdb調(diào)試它,注意gdb產(chǎn)生的(gdb)提示符。[root@localhostroot]#gcc-ghello.c-ohello[root@localhostroot]#gdb-qhello……(gdb)啟動(dòng)gdb后,可以使用很多命令。離開gdb:使用quit命令可以離開gdb環(huán)境并回到shell提示符。gdb支持很多的命令且能實(shí)現(xiàn)不同的功能。部分命令:見P94。323.4gdb調(diào)試工具例3.7設(shè)計(jì)一個(gè)程序,要求輸入兩個(gè)整數(shù),判斷并輸出其中的最小數(shù)。步驟1設(shè)計(jì)編輯源程序代碼。[root@localhostroot]#vim3-7.c333.4gdb調(diào)試工具步驟2用gcc編譯程序。在編譯的時(shí)候要加上選項(xiàng)“-g”。這樣編譯出的可執(zhí)行代碼中才包含調(diào)試信息,否則之后gdb無法載入該可執(zhí)行文件。[root@localhostroot]#
gcc3-7.c-o3-7-g步驟3進(jìn)入gdb調(diào)試環(huán)境。gdb進(jìn)行調(diào)試的是可執(zhí)行文件,因此要調(diào)試的是3-7而不是3-7.c,輸入如下:[root@localhost
root]#gdb3-7回車后就進(jìn)入了gdb調(diào)試模式。343.4gdb調(diào)試工具步驟4用gdb調(diào)試程序。(1)查看源文件在gdb中輸入“l(fā)”(list)就可以查看程序源代碼,一次顯示10行。(2)設(shè)置斷點(diǎn)在gdb中設(shè)置斷點(diǎn)命令是“b”(break),后面跟行號(hào)或者函數(shù)名。(3)查看斷點(diǎn)信息用命令“infob”(infobreak)查看斷點(diǎn)信息。(4)運(yùn)行程序輸入“r”(run)開始運(yùn)行程序。(5)查看與設(shè)置變量值程序運(yùn)行到斷點(diǎn)處會(huì)自動(dòng)暫停,輸入“p變量名”可查看指定變量的值。(6)單步運(yùn)行在斷點(diǎn)處輸入“n”(next)或者“s”(step)可單步運(yùn)行。它們之間的區(qū)別在于:若有函數(shù),調(diào)用時(shí),“s”會(huì)進(jìn)入該函數(shù),而“n”不會(huì)進(jìn)入該函數(shù)。353.4gdb調(diào)試工具步驟4用gdb調(diào)試程序。(7)繼續(xù)運(yùn)行程序在查看完變量或堆棧情況后可以輸入“c”(continue)命令恢復(fù)程序的正常運(yùn)行,把剩余的程序執(zhí)行完,并顯示執(zhí)行結(jié)果。(8)退出gdb環(huán)境退出gdb環(huán)境只要輸入“q”(quit)命令,回車后退出gdb環(huán)境。3637思考與實(shí)驗(yàn)編寫一個(gè)簡(jiǎn)單的C語言程序:輸出兩行文字“Howareyou”,在Linux下編輯、編譯、運(yùn)行。編寫一個(gè)簡(jiǎn)單的C語言程序:根據(jù)輸入的兩個(gè)整數(shù)求平均值并且在終端輸出,通過gcc編譯器得到它的匯編程序文件。Makfile文件中的每一行是描述文件間依賴關(guān)系的make規(guī)則。對(duì)于下面的Makefile文件:CC=gccOPTIONS=-O3-oOBJECTS=main.o
stack.o
misc.oSOUR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑行業(yè)項(xiàng)目管理咨詢流程優(yōu)化
- 保險(xiǎn)公司客戶滿意度評(píng)優(yōu)方案
- 交通運(yùn)輸項(xiàng)目勘察質(zhì)量及安全措施
- 家庭春季德育教育計(jì)劃
- 文體場(chǎng)館水電工的職責(zé)與保障
- 2025年產(chǎn)科心理健康服務(wù)計(jì)劃
- 歷史經(jīng)典著作閱讀心得體會(huì)
- 2025年高校學(xué)生自我鑒定范文
- 2025年雙語疫苗接種宣傳計(jì)劃
- 雙門轎跑車項(xiàng)目安全風(fēng)險(xiǎn)評(píng)價(jià)報(bào)告
- 信息化建設(shè)情況調(diào)查表
- 2019電網(wǎng)配電運(yùn)維班組標(biāo)準(zhǔn)化管理手冊(cè)
- 《小學(xué)語文略讀課文教學(xué)策略》講座 全國(guó)獲獎(jiǎng)
- 第二章 民事權(quán)益保護(hù)追求幸福的基石
- 風(fēng)電場(chǎng)工程可行性研究報(bào)告
- 某醫(yī)學(xué)院醫(yī)學(xué)生腎病科疾病教案-腎病綜合征
- “水溶液中的多重平衡體系”單元教學(xué)設(shè)計(jì)
- 2023年河南成人學(xué)位英語真題及答案
- 《種子學(xué)》考試復(fù)習(xí)題庫(kù)(附答案)
- 中學(xué)生社會(huì)實(shí)踐活動(dòng)(社區(qū)服務(wù))登記表
- 生態(tài)保護(hù)紅線內(nèi)人類活動(dòng)生態(tài)環(huán)境影響評(píng)價(jià)技術(shù)指南
評(píng)論
0/150
提交評(píng)論