




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GNU开发工具链介绍开发工具链介绍xlanchen2007.5.22http:/ Operating Systems2“工欲善其事, 必先利其器”-论语xlanchen2007.5.22Embedded Operating Systems3主要内容主要内容lGNU Tools简介lGNU Tools交叉开发环境及其安装xlanchen2007.5.22Embedded Operating Systems4本地开发本地开发 vs 交叉平台开发交叉平台开发l本地开发:一般软件的开发属于本地开发,也就是说开发软件的系统与运行软件的系统是相同的。l交叉平台开发:本课程所涉及到的嵌入式系统开发属于交叉平
2、台开发,也就是说开发软件的系统与运行软件的系统不同。xlanchen2007.5.22Embedded Operating Systems5交叉开发平台交叉开发平台l主机:开发软件的平台,称为主机,往往是通用电脑;l目标机:运行软件的平台,称为目标机,在这里是嵌入式系统。xlanchen2007.5.22Embedded Operating Systems6嵌入式交叉开发工具嵌入式交叉开发工具l掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一l与主流开发工具类似,嵌入式交叉开发工具也包括1.编译器,即能够把一个源程序编译生成一个可执行程序的软件2.调试工具,即能够对执行程序进行源码或汇编
3、级调试的软件3.软件工程工具,用于协助多人开发或大型软件项目的管理的软件xlanchen2007.5.22Embedded Operating Systems7GNU toolslGNU tools和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具。为了更好的开发嵌入式系统,需要熟悉如下一些软件lGCClBinutils辅助GCC的主要软件lGdblmakelcvsxlanchen2007.5.22Embedded Operating Systems8一、一、GCCl很多人认为GCC只是一个C编译器,其实GCC = GNU Compiler Collectionl目前,GCC可以支持多
4、种高级语言,如lC、C+lADAlObject ClJAVAlFortranlPASCALxlanchen2007.5.22Embedded Operating Systems9GCC下的工具下的工具lcpp 预处理器GNU C编译器在编译前自动使用cpp对用户程序进行预处理lgcc 符合ISO等标准的C编译器lg+ 基本符合ISO标准的C+编译器lgcj GCC的java前端lgnat GCC的GNU ADA 95前端xlanchen2007.5.22Embedded Operating Systems10GNU Toolsgcclgcc是一个强大的工具集合,它包含了预处理器、编译器、汇编器
5、、链接器等组件。它会在需要的时候调用其他组件。输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件。l对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要xlanchen2007.5.22Embedded Operating Systems11gcc使用举例(使用举例(1)源程序源程序xlanchen2007.5.22Embedded Operating Systems12gcc使用举例(使用举例(2)编译和运行编译和运行编译运行xlanchen2007.5.22Embedded Operating Systems13gcc的工作过程
6、(的工作过程(1)l如果使用-v选项,则可以看到许多被隐藏的信息xlanchen2007.5.22Embedded Operating Systems14xlanchen2007.5.22Embedded Operating Systems15gcc的编译过程的编译过程l一般情况下,c程序的编译过程为1、预处理2、编译成汇编代码3、汇编成目标代码4、链接xlanchen2007.5.22Embedded Operating Systems161、预处理、预处理l预处理:使用-E参数输出文件的后缀为“.cpp”gcc E o gcctest.cpp gcctest.cl使用wc命令比较预处理后的
7、文件与源文件,可以看到两个文件的差异xlanchen2007.5.22Embedded Operating Systems17行数 单词数 字节数预编译xlanchen2007.5.22Embedded Operating Systems18l预处理文件汇编代码1)使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译2)使用-S说明生成汇编代码后停止工作gcc x cpp-output S o gcctest.s gcctest.cppl也可以直接编译到汇编代码gcc S gcctest.c2、编译成汇编代码、编译成汇编代码xlanchen2007.5.2
8、2Embedded Operating Systems19预处理文件汇编代码直接编译到汇编代码xlanchen2007.5.22Embedded Operating Systems203、编译成目标代码、编译成目标代码l汇编代码目标代码gcc x assembler c gcctest.sl直接编译成目标代码gcc c gcctest.cl使用汇编器生成目标代码as o gcctest.o gcctest.sxlanchen2007.5.22Embedded Operating Systems21汇编代码目标代码直接编译成目标代码使用汇编器xlanchen2007.5.22Embedded O
9、perating Systems224、编译成执行代码、编译成执行代码l目标代码执行代码gcc o gcctest gcctest.ol直接生成执行代码gcc o gcctest gcctest.cxlanchen2007.5.22Embedded Operating Systems23目标代码执行代码直接生成执行代码xlanchen2007.5.22Embedded Operating Systems24gcc的高级选项的高级选项l-Wall:打开所有的警告信息xlanchen2007.5.22Embedded Operating Systems25根据警告信息检查源程序根据警告信息检查源程
10、序Main函数的返回值为int在函数的末尾应当返回一个值xlanchen2007.5.22Embedded Operating Systems26修改源程序修改源程序xlanchen2007.5.22Embedded Operating Systems27优化编译优化编译l优化编译选项有:l-O0缺省情况,不优化l-O1l-O2l-O3l等等不同程度的优化xlanchen2007.5.22Embedded Operating Systems28gcc的优化编译举例(的优化编译举例(1)考虑如下的源代码考虑如下的源代码不同的优化编译选项xlanchen2007.5.22Embedded Oper
11、ating Systems29gcc的优化编译举例(的优化编译举例(2)使用使用time命令统计程序的运行命令统计程序的运行xlanchen2007.5.22Embedded Operating Systems30二、二、GNU binutilslbinutils是一组二进制工具程序集,是辅助GCC的主要软件,它主要包括1.addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。2.ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。
12、xlanchen2007.5.22Embedded Operating Systems313.as 是GNU汇编器,主要用来编译GNU C编译器gcc输出的汇编文件,他将汇编代码转换成二进制代码,并存放到一个object文件中,该目标文件将由连接器ld连接4.C+filt解码C+符号名,连接器使用它来过滤 C+ 和 Java 符号,防止重载函数冲突。 5.gprof 显示程序调用段的各种数据。6.ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用ld。xlanchen2007.5.22Embedded
13、 Operating Systems327.nm 列出目标文件中的符号。8.objcopy把一种目标文件中的内容复制到另一种类型的目标文件中.9.objdump 显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。10.ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。11.readelf 显示ebf格式可执行文件的信息。xlanchen2007.5.22Embedded Operating Systems3312.size 列出目标文件每一段的大小以及总体的大小。默认情况下
14、,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。13.strings 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。14.strip 丢弃目标文件中的全部或者特定符号。xlanchen2007.5.22Embedded Operating Systems3415. libiberty 包含许多GNU程序都会用到的函数,这些程序有: getopt, obstack, strerror, s
15、trtol 和 strtoul.16.libbfd 二进制文件描述库.17.libopcodes 用来处理opcodes的库, 在生成一些应用程序的时候也会用到它, 比如objdump.Opcodes是文本格式可读的处理器操作指令.xlanchen2007.5.22Embedded Operating Systems35binutils开发工具使用举例开发工具使用举例larlnmlObjcopylObjdumplreadelfxlanchen2007.5.22Embedded Operating Systems361、arlar用于建立、修改、提取归档文件(archive),一个归档文件,是包
16、含多个被包含文件的单个文件(也可以认为归档文件是一个库文件)。l被包含的原始文件的内容、权限、时间戳、所有者等属性都保存在归档文件中,并且在提取之后可以还原xlanchen2007.5.22Embedded Operating Systems37使用使用ar建立库文件(建立库文件(1)l源程序add.c和minus.cxlanchen2007.5.22Embedded Operating Systems38使用使用ar建立库文件(建立库文件(2)编译成目标文件将库文件拷贝到/usr/lib目录下Ar的rv参数的说明:r:将多个文件组成一个文件v:输出信息建立库文件xlanchen2007.5.
17、22Embedded Operating Systems39库文件使用举例库文件使用举例在代码中使用在代码中使用Add和和Minus函数函数xlanchen2007.5.22Embedded Operating Systems40在编译时指定库文件在编译时指定库文件指明将libtest.a链接进来运行结果xlanchen2007.5.22Embedded Operating Systems412、nmlnm的主要功能是列出目标文件中的符号,这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性xlanchen2007.5.22Embedded Operating Systems42
18、nm显示的符号类型显示的符号类型A:符号的值是绝对值,并且不会被将来的链接所改变B:符号位于未初始化数据部分(BSS段)C:符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能以相同的名字出现。如果符号在其他地方被定义,则该文件中的这个符号会被当作引用来处理D:符号位于已初始化的数据部分T:符号位于代码部分U:符号未被定义?:符号类型未知,或者目标文件格式特殊xlanchen2007.5.22Embedded Operating Systems43nm使用举例使用举例如果对test可执行文件使用nm,会有什么结果呢?(作业)xlanchen2007.5.22Embedded Op
19、erating Systems443、objcopyl可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。l它使用GNU BFD(binary format description)库读/写目标文件,通过这个BFD库,objcopy能以一种不同于源目标文件的格式生成新的目标文件l$objcopy -hl在makefile里面用-O binary 选项来生成原始的二进制文件,即通常说的image文件xlanchen2007.5.22Embedded Operating Systems45Objcopy使用举例使用举例使用file命令查看文件类型生成srec格式的目标文件使用fil
20、e命令查看新文件的类型xlanchen2007.5.22Embedded Operating Systems46文件格式文件格式la.out:assembler and link editor output 汇编器和链接编辑器的输出 lcoffcommon object file format一种通用的对象文件格式 lELFexcutive linked fileLinux系统所采用的一种通用文件格式,支持动态连接。ELF格式可以比COFF格式包含更多的调试信息 xlanchen2007.5.22Embedded Operating Systems47文件格式文件格式lFlatelf格式有很大
21、的文件头,flat文件对文件头和一些段信息做了简化uClinux系统使用flat可执行文件格式lSRECMOTOROLA S-Recoder格式(S记录格式文件) l等等xlanchen2007.5.22Embedded Operating Systems484、objdumpl显示一个或多个目标文件的信息,由其选项来控制显示哪些信息。l一般来说,objdump只对那些要编写编译工具的程序员有帮助,但是我们通过这个工具可以方便的查看执行文件或者库文件的信息xlanchen2007.5.22Embedded Operating Systems49Objdump使用举例(使用举例(1)-f选项:显
22、示文件头中的内容xlanchen2007.5.22Embedded Operating Systems50Objdump使用举例(使用举例(2)-d选项进行反汇编xlanchen2007.5.22Embedded Operating Systems515、readelflreadelf:显示一个或多个ELF格式的目标文件信息。xlanchen2007.5.22Embedded Operating Systems52Readelf使用举例使用举例xlanchen2007.5.22Embedded Operating Systems53三、其他三、其他GNU工具工具lGdb调试器lGNU make
23、软件工程工具ldiff,patch补丁工具lCVS版本控制系统xlanchen2007.5.22Embedded Operating Systems541、GNU Toolchaingdb lGdb = GNU debugerlGNU tools中的调试器,功能强大l设置断点l监视、修改变量l单步执行l显示/修改寄存器的值l堆栈查看l远程调试xlanchen2007.5.22Embedded Operating Systems55gdb使用举例使用举例l源代码如下编译:gcc o bug bug.cxlanchen2007.5.22Embedded Operating Systems56编译并
24、运行编译并运行?编译xlanchen2007.5.22Embedded Operating Systems57使用使用gdb调试调试bug运行bug输入字符串hello显示出错位置能不能看到源代码呢?xlanchen2007.5.22Embedded Operating Systems58使用使用gcc的的-g参数参数lgcc g o bug bug.cl重新调试列出源代码xlanchen2007.5.22Embedded Operating Systems59?怎么修改前面的源代码呢?(作业)设置断点xlanchen2007.5.22Embedded Operating Systems602
25、、使用、使用GNU make管理项目管理项目lGNU make是一种代码维护工具,在使用GNU编译器开发大型应用时,往往要使用make管理项目。l如果不使用make管理项目,就必须重复使用多个复杂的命令行维护项目和生成目标代码。lMake通过将命令行保存到makefile中简化了编译工作。lMake的主要任务是根据makefile中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和代码生成工作。xlanchen2007.5.22Embedded Operating Systems61lMake可以识别出makefile中哪些文件已经被修改,并且在再次编译的时候只编译这些文件
26、,从而提高编译的效率lMake会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则make就执行makefile文件中描述的相应命令,以便更新目的文件l只更新那些需要更新的文件,而不重新处理那些并不过时的文件xlanchen2007.5.22Embedded Operating Systems62l特点:l适合于支持多文件构成的大中型软件项目的编译,链接,清除中间文件等管理工作l提供和识别多种默认规则,方便对大型软件项目的管理l支持对多目录的软件项目进行递归管理l对软件项目具有很好的可维护性和扩展性xlanchen2007.5.22Embedded Ope
27、rating Systems63makefilelMakefile告诉make该做什么、怎么做lmakefile主要定义了1)依赖关系即有关哪些文件的最新版本是依赖于哪些别的文件产生或者组成的2)需要用什么命令来产生目标文件的最新版本3)以及一些其他的功能xlanchen2007.5.22Embedded Operating Systems64Makefile的规则的规则l规则一条规则包含3个方面的内容,1)要创建的目标(文件),2)创建目标(文件)所依赖的文件列表;3)通过依赖文件创建目标文件的命令组xlanchen2007.5.22Embedded Operating Systems65l
28、规则一般形式target . : prerequisites . command . . l例如test:test.c;gcc O o test test.cxlanchen2007.5.22Embedded Operating Systems66一个简单的一个简单的makefileedit : main.o kbd.o command.o display.o insert.o search.o files.o utils.occ -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.omain.o :
29、 main.c defs.hcc -c main.ckbd.o : kbd.c defs.h command.hcc -c kbd.ccommand.o : command.c defs.h command.hcc -c command.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffe
30、r.h command.hcc -c files.cutils.o : utils.c defs.hcc -c utils.cclean : rm edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o xlanchen2007.5.22Embedded Operating Systems67Make的工作过程的工作过程ldefault goal在缺省的情况下,make从makefile中的第一个目标开始执行lMake的工作过程类似一次深度优先遍历过程xlanchen2007.5.22Embedded Op
31、erating Systems68Makefile 中的变量中的变量l使用变量可以l降低错误风险l简化makefilel例:objects变量($(objects))objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects) xlanchen2007.5.22Embedded Operating Systems69l有点像环境变量l环境变量在make 过程中被解释成make的变量l可以被用来l贮存一个文件名列表。l贮存可执行文
32、件名。如用变量代替编译器名。l贮存编译器FLAGxlanchen2007.5.22Embedded Operating Systems70预定义变量预定义变量lMake使用了许多预定义的变量,如lARlASlCClCXXlCFLAGSlCPPFLAGSl等等xlanchen2007.5.22Embedded Operating Systems71简化后的简化后的makefile文件文件objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.oedit : $(objects) cc -o edit $
33、(objects)main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h display.o : defs.h buffer.h insert.o : defs.h buffer.h search.o : defs.h buffer.h files.o : defs.h buffer.h command.h utils.o : defs.h .PHONY : clean clean : rm edit $(objects) xlanchen2007.5.22Embedded Operating Systems7
34、2内部变量内部变量l$扩展成当前规则的目的文件名l$扩展成依赖列表中的第一个依赖文件l$扩展成整个依赖列表(除掉了里面所有重复的文件名) l等等l不需要括号括住l例如:CC = gccCFLAGS = -Wall -O -g foo.o : foo.c foo.h bar.h $(CC) $(CFLAGS) -c $ -o $xlanchen2007.5.22Embedded Operating Systems73隐含规则隐含规则 (Implicit Rules)l内置的规则l告诉make当没有给出某些命令的时候,应该怎么办。l用户可以使用预定义的变量改变隐含规则的工作方式,如l一个编译的具体
35、命令将会是:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $ -o $xlanchen2007.5.22Embedded Operating Systems74设定目标(设定目标(Phony Targets)l设定目标l目标不是一个文件l其目的是为了让一些命令得以执行l使用PHONY显式声明设定目标l.PHONY: cleanl使用设定目标实现多个目的lall: prog1 prog2xlanchen2007.5.22Embedded Operating Systems75典型的设定目标典型的设定目标l设定目的也可以用来描述一些其他的动作。例如,想
36、把中间文件和可执行文件删除,可以在 makefile 里设立这样一个规则:clean:$rm *.o exec_file前提是没有其它的规则依靠这个 clean 目的,它将永远不会被执行。但是,如果你明确的使用命令 make clean , make 会把这个目的做为它的主要目标,执行那些 rm 命令xlanchen2007.5.22Embedded Operating Systems76Makefile中的函数中的函数 (Functions)l用来计算出要操作的文件、目标或者要执行的命令l使用方法:l$(function arguments)l典型的函数l$(subst from,to,te
37、xt) l$(subst ee,EE,feet on the street) l相当于fEEt on the strEEt xlanchen2007.5.22Embedded Operating Systems77l$(patsubst pattern,replacement,text)l$(patsubst %.c,%.o,x.c.c bar.c) l相当于x.c.o bar.ol$(wildcard pattern) l$(wildcard *.c)lobjects := $(wildcard *.o) xlanchen2007.5.22Embedded Operating Systems
38、78makefile中的条件语句中的条件语句conditional-directivetext-if-trueendiforconditional-directivetext-if-trueelsetext-if-falseendifxlanchen2007.5.22Embedded Operating Systems79四种条件语句四种条件语句lifeq.else.endiflifneqelseendiflifndefelseendif lifndef.elseendif xlanchen2007.5.22Embedded Operating Systems80实际项目中的实际项目中的mak
39、efilel找到Linux或者uClinux源代码中所有的makefile,分析它们的功能、相互关系。xlanchen2007.5.22Embedded Operating Systems813、GNU Toolsldld,The GNU LinkerLinux上常用的链接器lld软件的作用是把各种目标文件(.o文件)和库文件链接在一起,并定位数据和函数地址,最终生成可执行程序lgcc可以间接的调用ld,使用gcc的-Wl参数可以传递参数给ldl使用命令:ld -help可以列出ld常用的一些选项xlanchen2007.5.22Embedded Operating Systems82ld使用
40、举例(使用举例(1)l源程序l编译hello.c到hello.ol命令:gcc -c hello.cxlanchen2007.5.22Embedded Operating Systems83ld使用举例(使用举例(2)l链接l命令:ld dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o hello.o lc o hellol运行./helloxlanchen2007.5.22Embedded Operating Systems84目标文件目标文件lld通过BFD库可以读取和操作co
41、ff、elf、a.out等各种执行文件格式的目标文件lBFD(Binary File Descriptor)l目标文件(object file)l由多个节(section)组成,常见的节有:ltext节保存了可执行代码,ldata节保存了有初值的全局标量,lbss节保存了无初值的全局变量。xlanchen2007.5.22Embedded Operating Systems85l使用objdump查看目标文件的信息lobjdump h hello.ol比较hello 看看有什么不同?(作业)xlanchen2007.5.22Embedded Operating Systems86链接描述文件(
42、链接描述文件( Linker script )l可以使用链接描述文件控制ld的链接过程。链接描述文件,command file又称为链接脚本,Linker scriptl用来控制ld的链接过程l描述各输入文件的各节如何映射到输出文件的各节l控制输出文件中各个节或者符号的内存布局l使用的语言为:lThe ld command language,链接命令语言xlanchen2007.5.22Embedded Operating Systems87lld命令的-T commandfile选项指定了链接描述文件名l如果不指定链接描述文件,ld就会使用一个默认的描述文件来产生执行文件l找到Linux或者
43、uClinux中的链接描述文件并分析。 (作业)xlanchen2007.5.22Embedded Operating Systems88链接描述文件的命令链接描述文件的命令l链接描述文件的命令主要包括如下几类:l设置入口点命令l处理文件的命令l处理文件格式的命令l其他xlanchen2007.5.22Embedded Operating Systems89常用的命令常用的命令l设置入口点l格式:ENTRY(symbol)设置symbol的值为执行程序的入口点。lld有多种方法设置执行程序的入口点,确定程序入口点的顺序如下:lld命令的-e选项指定的值lEntry(symbol)指定的值l.t
44、ext节的起始地址l入口点为0 xlanchen2007.5.22Embedded Operating Systems90常用的命令常用的命令lINCULDE filename包含其他filename的链接描述文件lINPUT(file,file,)指定多个输入文件名xlanchen2007.5.22Embedded Operating Systems91常用的命令常用的命令lOUTPUT_FORMAT(bfdname)指定输出文件的格式lOUTPUT_ARCH ( bfdname ) l指定目标机器体系结构,例如:OUTPUT_ARCH(arm)xlanchen2007.5.22Embedd
45、ed Operating Systems92常用的命令常用的命令lMEMORY:这个命令在用于嵌入式系统的链接描述文件中经常出现,它描述了各个内存块的起始地址和大小。格式如下:MEMORYname (attr):ORIGIN = origin,LENGTH = lenl例如:xlanchen2007.5.22Embedded Operating Systems93Memory举例举例xlanchen2007.5.22Embedded Operating Systems94SECTIONS命令命令lSECTIONS告诉ld如何把输入文件的各个节映射到输出文件的各个节中。l在一个链接描述文件中只能有一个SECTIONS命令l在SECTIONS命令中可以使用的命令有三种:l定义入口点l赋值l定义输出节xlanchen2007.5.22Embedded Operating Systems95定义输出节定义输出节SECTIONS .secname : contents . l例如:xlanchen2007.5.22Embedded Operating Systems96定位计数器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中介协议的合同范本
- 2025劳动合同补充协议
- 2025新款合同范本下载
- 2025建筑工程施工标准合同
- 2025年广州市房屋租赁合同协议
- 2025年商业店铺租赁合同简易范本
- 2025某科技研究所科研项目合同书
- 2025商场装修管理合同范本
- 2025石油供应协议合同范本
- 2025年成都技术合同备案登记
- 农业昆虫学-形考测试二-国开(ZJ)-参考资料
- 2024-2030年中国分布式光伏电站行业发展规模及项目投资可行性分析报告
- 2024年高考真题-地理(河北卷) 含答案
- 2025年全年考勤表
- 2024年湖北省高考数学第二次联考试卷附答案解析
- 部编四年级道德与法治下册全册教案(含反思)
- 4.1.2-指数函数的性质与图象教学设计
- 工程伦理(2024东莞理工)学习通超星期末考试答案章节答案2024年
- 医学教材 《疟疾》课件
- 医院质量管理及评估制度
- 平房区全面推进信访工作法治化测试练习试卷附答案
评论
0/150
提交评论