




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 程序的编译与调试第一部分 配置本地计算机与虚拟机的通讯一、 配置本地计算机的vmnet1网络接口1、 由开始控制面网络连接2、 双击VMware Network Adapter VMnet1接口在“VMware Network Adapter VMnet1”状态对话框中选择属性按钮3、 在“VMware Network Adapter VMnet1”属性对话框中双击“Internet协议(TCP/IP)”出现“Internet协议(TCP/IP)属性”对话框例:若VMnet1的IP地址为:7 子网掩码为:那么:虚拟机中Linux设置的IP地址必须是:10.64.254.xx 其中xx表示:1254二、 配置虚拟机1、 打开虚拟机,但不要执行Power on this virtual machine而是双Network Adapter2、 在出现的“Virtual Machine Setting”对话框中确保选中“Host-only”选项确定按钮3、 选择“Power on this virtual machine”启动虚拟机三、 配置Linux网络接口的IP地址1、使用root用户登录linux操作系统后,执行netconfig命令,将linux计算机IP地址设置为与本地计算机的VMnet1网络接口的IP地址处于同一网段,设置完成后输入reboot重启linux操作系统例:若VMnet1的IP地址为:7 子网掩码为:那么:虚拟机中Linux设置的IP地址必须是:10.64.254.xx 其中xx表示:12542、在本地计算由9/gaobao/下载ssh_pshell,打开ssh_pshell连接虚拟机,以root用户登录第二部分 gcc编译器的使用作业:编译如下程序,并填写程序的输出结果:1、源代码-Pointer.c#include int main() int a = 100, b = 200; int *p1 = &a, *p2 = &b; printf(“%d, %dn”,a,b); printf(“%d,%dn”,*p1, *p2); printf(“%x,%xn”,&a,&a); printf(“%x,%xnn”,p1,p2); *p1 = *p1*3; Printf(“%dn”,a); Printf(“%dnn”,*p1); p1 = &b; printf(“%xn”,p1); printf(“%xn”,p2); return 0;2、 编译:#gcc o pointer pointer.c3、 执行#./point(二)、运行结果运行结果:100 200100 200bfff5c4 bffff5c4bffff5c4 bffff5c0需要的技能0、vi编辑器的使用Vi是广泛应用于各种unix和Linux系统中的文本编辑器,它是标准的Linux文本编辑程序。它可打开或保存的格式均为ASCii格式(文本)。(一)、创建文件格式:vi n 如果 文件已经存在,vi会打开现存文件n 如果是一个新文件,vi会创建它 (二)、vi编辑器的模式n 输入模式(插入模式)n 命令模式由输入模式转入命令模式:ESC键由命令模式转入输入模式:a、A;o、O;i、I字符键1、 输入模式转入输入模式:n 添加:n 输入a后,在光标的右边插入文本 n 输入A,在一行的结尾处添加文本 n 插入:n 通过在命令模式下输入i,在光标的左边插入文本 n 通过在命令模式下输入I,在行首插入文本 n 插入新行:n 输入o,在当前光标位置下面打开一行 n 输入O,在当前光标位置上面打开一行 2、 命令模式在该模式中,可以输入命令来执行许多种功能大多数的vi命令都是由一个或两个字母加上一个可选数字组成1)、命令模式可执行的命令2)、翻页n 向前翻页一屏:要向前滚动(向下移动)一整屏,需按下Ctrl-f。光标将移动到新屏的左上角n 向前滚动半屏:要向前滚动半屏,需按Ctrl-dn 向后翻页一屏:要向后滚动(即向上移动)一整屏,需按下Ctrl-bn 向后滚动半屏:要向后滚动半屏,需按下Ctrl-u3)、撤消更改n 撤消前一个命令:在最后一个命令之后立即输入u来撤消该命令n 撤消对一行的更改:输入U来撤消你对一行所做的所有更改这个命令只有在你没将光标移动到该行以外时才生效4)、删除文本n 删除一个字符:n 为删除一个字符,需将光标放置在要删除的字符上并输入xn 为删除光标之前(其左边)的一个字符,需输入Xn 删除一个词或词的部分内容:n 为删除一个词,需将光标放置到该词的开头并输入dwn 为删除词的部分内容,需将光标放置到该词要保存部分的右边。输入dw来删除该词余下的部分n 删除一行:n 将光标放置到该行的任意处并输入ddn 删除行的部分内容:n 将光标放置到该行要保存部分的右边,并输入D。为删除光标左边的所有内容,须将光标放置到该行要删除部分的右边,并输入d0(d-零)。n 删除到文件的结尾:n 为删除从当前行到文件结尾的所有内容,需输入dG5)、复制和移动文本n 复制一行命令:yyn 粘贴命令:pn 移动文本:n 先将要移动的部分用删除命令删除,然后再粘贴就可以了3、查找字符串1)、查找一个字符串:n 输入/,并在/后面输入要查找的串,然后按下回车n 输入“n”跳转到该串的下一个出现处n 输入“N”跳转到该串的上一个出现处2)、替换一个字符串n 在一行内替换头一个字符串old为新的字符串newn :s/old/newn 在一行内替换所有的字符串old为新的字符串newn :s/old/new/gn 在两行内替换所有的字符串old为新的字符串newn :#,#s/old/new/gn 在文件内替换所有的字符串old为新的字符串newn :%s/old/new/gn 进行全文替换时询问用户确认每个替换需添加c选项n :%s/old/new/gc一、程序的编译过程在使用gcc编译程序时,编译过程可以分为4个阶段1)、预处理(Pre-Processing)在预处理阶段,输入的是C语言的源文件。在这个阶段主要处理源文件中的#indef、#include和#define预处理命令。该阶段会生成一个中间文件*.i,但实际工作中一般不用专门生成这个文件,若必须要生成这个文件,可以使用如下命令:#gcc E test.c -o test.i说明:它通过对源文件test.c使用E选项来生成中间文件test.i2)、汇编(Assembling)在汇编阶段,输入的是中间文件*.i,编译后生成汇编编语言文件*.s。这个阶段对应的gcc命令如下:#gcc -S test.i -o test.s3)、编译(Compiling)在编译阶段,将输入的汇编文件*.s转换成二进制机器代码*.o,这个阶段对应的命令如下:#gcc -c test.s -o test.o在功能上,预处理、编译、汇编是3个不同的阶段,但gcc在实际操作时可以把这3个步骤合并为一个步骤来执行 4)、链接(Linking)在链接阶段将输入的二进制机器代码*.o,与其它的机器代码和库文件汇集成一个可执行的二进制代码文件,这步骤通过以下命令来实现:#gcc test.o -o test 最终生成可执行文件test上述过程可以简化为:#gcc -c test.c -o test.o#gcc test.o -o test或直接使用一条命令;#gcc test.c -o test二、gcc常用选项使用gcc编译源程序时,源文件可能不止一个,这时就需要使用gcc编译多个源文件,使用的命令如下:#gcc -o test testmain.c other1.c other2.cgcc 最基本的用法是:格式: gcc 选项 filenames选项:-c 只编译,不链接成可执行文件,编译器只是由输入的.c等为后缀的源 代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子 程序文件 -o output_filename 确定输出文件的名称为output_filename,同时这个名称 不能和源文件同名。如果不给出这个选项,gcc就默认 将输出的可执行文件命名为a.out -g 产生调试器gdb所必需的符号信息,要对源代码进行调试,就必须在 编译程序时加入这个选项 -O 对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、 链接过程中进行优化处理,这样产生的可执行文件的执行效率较高, 但是,编译、链接的速度就相应地要慢一些-O2 比-O更好的优化编译、链接,当然整编译、链接过程会更慢-Wall 输出所有警告信息,在编译过程中如果gcc遇到一些认为可能会发生 错误的地方就会提出一些相应的警告和提示信息,提示注意这个地方 是不是会有什么错误-w 关闭所有警告,建议不要使用这个选项-Idirnme 将名为dirname的目录加入到程序头文件目录列表中,它是在预 处理阶段使用的选项。I意指Incude 在C语言程序中,头文件被大量使用。一般而言,C程序通常由头文件(header files)和定义文件(definition files)组成。头文件一般包含函数原型说明、常量定义的文件,用于保存程序的声明,而定义文件用于保存程序的实现C程序中包含头文件有两种方法: #include #include “myinc.h”第一种使用尖括号(),第二种使用(“”)。对于第一种,编译器gcc在系统预设包含文件目录(如/usr/include)中查找相应的头文件myinc.h。而对于第二种,编译器gcc首先在当前目录中查找头文件,如果当前目录中没有找到需要的头文件,就到指定的dirname目录中去寻找。对于系统提供的头文件,通常以第一种方式包含到源程序中。在实际开发中,对于自己编写的头文件,通常放在与源程序相同的目录中,并以第二种方法包含该头文件。但在编写大型程序时,往往把头文件单独放在一个目录中,此时编译程序时需要用该选项告诉编译器到名为dirname的目录中去查找头文件。否则,编译器会因为找不到相应的头文件而使编译失败。-Ldirname 将名为dirname的目录加入到程序的库文件搜索目录列表中,它 在链接过程中使用的参数。L意指Link 库是事先已经编写好的代码,经过编译后可以直接调用的文件。也可以编写属于自己的库文件,以方便自己使用或提供给他人使用。库体现了软件工程中的软件重用的思想。对于一些常用的功能,可以编写成一系统的函数,并把这些函数按功能放在库文件中。系统默认提供了许多库,比如数学函数库,它提供了一些求绝对值、开方、求三角函数值等功能函数。库分为两种:静态库和动态库。在默认情况下,编译器gcc在系统默认路径中(如/usr/lib)寻找所需要的库文件,这个选项告诉编译器,首先到-L指定的目录中去寻找,然后到系统默认的路径中寻找,如果函数库放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。 -lname 指示编译器,在链接时,装载名为libname.a的函数库,该函数库位 于系统预定义的目录或者由-L选项指定的目录下,如-lm表示链接 名为libm.a的数学函数库第三部分 gdb编译器的使用作业1、程序1计算1100的和,应该输出5050,但程序运行后输出值为:4950# cat -n test.c 1 #include 2 3 int get_sum(int n) 4 5 int sum = 0, i; 6 for (i=0;in;i+) 7 sum +=i; 8 return sum; 9 10 11 int main() 12 13 int i = 100, result; 14 result = get_sum(i); 15 printf(1+2+.+%d=%dn,i,result); 16 return 0; 17 编译并运行该程序:# gcc -g test.c -o test# ./test1+2+.+100=4950试用gdb调试器说明程序设计错误在何处(gdb) break 7 if i=99Breakpoint 5 at 0x80483aa: file test.c, line 7.(gdb) runThe program being debugged has been started already.Start it from the beginning? (y or n) yStarting program: /home2/b5/testBreakpoint 5, get_sum (n=100) at test.c:77 sum+=i;(gdb) print i$5 = 99(gdb) print sum$6 = 4851(gdb) next6 for(i=0;in;i+)(gdb) next8 return sum;(gdb) print sum$7 = 4950(gdb) next9 (gdb) nextmain () at test.c:1515 printf(1+2+.+%d=%dn,i,result);(gdb) next1+2+.+100=495016 return 0;(gdb) next17 (gdb) next0x4003a250 in _libc_start_main () from /lib/tls/libc.so.6所以少加一个100正确的完整代码为:#includeint get_sum(int n) int sum=0,i; for(i=0;i=n;i+) sum+=i; return sum;int main() int i=100,result; result=get_sum(i); printf(1+2+.+%d=%dn,i,result); return 0;2、程序2在sort()函数中有两个循环。外层循环针对每个数组元素执行一次,它的循环计数变量是i。内层循环的作用是交换相邻的两个元素。总的效果是让比较小的元素像“气泡”一样“冒”到数组的顶部。外层循环每执行一次,数组中的最大的元素就会“下沉”到数组的底部。我们可以通过在外层循环中停止此程序的运行并检查数组的状态来核实这一点/* 1 */ typedef struct /* 2 */ char data4096;/* 3 */ int key;/* 4 */ item;/* 5 */ /* 6 */ item array = /* 7 */ bill, 3,/* 8 */ neil, 4,/* 9 */ john, 2,/* 10 */ rick, 5,/* 11 */ alex, 1,/* 12 */ ;/* 13 */ /* 14 */ sort(a,n)/* 15 */ item *a; /* 16 */ /* 17 */ int i = 0, j = 0;/* 18 */ int s = 1;/* 19 */ /* 20 */ for(; i n & s != 0; i+) /* 21 */ s = 0;/* 22 */ for(j = 0; j aj+1.key) /* 24 */ item t = aj;/* 25 */ aj = aj+1;/* 26 */ aj+1 = t;/* 27 */ s+;/* 28 */ /* 29 */ /* 30 */ n-;/* 31 */ /* 32 */ /* 33 */ #include /* 34 */ main()/* 35 */ /* 36 */ int i;/* 37 */ sort(array,5); /* 38 */ for(i = 0; i 5; i+)/* 39 */ printf(array%d = %s, %dn,/* 40 */ i, arrayi.data, arrayi.key);/* 41 */ 程序的运行结果为:array0 = john, 2array1 = alex, 1array2 = bill, 3array3 = neil, 4array4 = rick, 5由运行结果可以看出,程序并未按从小到大的顺序排列,试说明原因:(gdb) info displayAuto-display expressions now in effect:Num Enb Expression2: y array0 51: y array0 5(gdb) info breakNum Type Disp Enb Address What3 breakpoint keep y 0x080483cb in sort at test2.c:21 breakpoint already hit 3 times cont(gdb) disable display2warning: bad breakpoint number at or near display2(gdb) disable display 2(gdb) runStarting program: /home2/b5/test2Breakpoint 3, sort (a=0x80496a0, n=5) at test2.c:2121 for(j = 0; j n-1; j+) 1: array0 5 = data = bill, 0 , key = 3, data = neil, 0 , key = 4, data = john, 0 , key = 2, data = rick, 0 , key = 5, data = alex, 0 , key = 1Breakpoint 3, sort (a=0x80496a0, n=4) at test2.c:2121 for(j = 0; j n-1; j+) 1: array0 5 = data = bill, 0 , key = 3, data = john, 0 , key = 2, data = neil, 0 , key = 4, data = alex, 0 , key = 1, data = rick, 0 , key = 5Breakpoint 3, sort (a=0x80496a0, n=3) at test2.c:2121 for(j = 0; j n-1; j+) 1: array0 5 = data = john, 0 , key = 2, data = bill, 0 , key = 3, data = alex, 0 , key = 1, data = neil, 0 , key = 4, -Type to continue, or q to quit-return data = rick, 0 , key = 5array0 = john, 2array1 = alex, 1array2 = bill, 3array3 = neil, 4array4 = rick, 5Program exited with code 0224.(gdb) disable break 3(gdb) diaable display 2Undefined command: diaable. Try help.(gdb) disable display 1(gdb) list 3025 aj+1 = t;26 s+;27 28 29 n-;30 31 32 #include 33 main()34 (gdb) break 29Breakpoint 4 at 0x80484b2: file test2.c, line 29.(gdb) commands 2No breakpoint number 2.(gdb) commands 4Type commands for when breakpoint 4 is hit, one per line.End with a line saying just end.set variable n=n+1contend(gdb) runStarting program: /home2/b5/test2Breakpoint 4, sort (a=0x80496a0, n=5) at test2.c:2929 n-;Breakpoint 4, sort (a=0x80496a0, n=5) at test2.c:2929 n-;Breakpoint 4, sort (a=0x80496a0, n=5) at test2.c:2929 n-;Breakpoint 4, sort (a=0x80496a0, n=5) at test2.c:2929 n-;Breakpoint 4, sort (a=0x80496a0, n=5) at test2.c:2929 n-;array0 = alex, 1array1 = john, 2array2 = bill, 3array3 = neil, 4array4 = rick, 5A、程序1的调试过程在Linux应用程序开发中,最常用的调试器是gdb,它可以在程序中设置断点、查看变量值、一步一步跟踪程序的执行过程。利用调试器的这些功能可以方便地找出程序中存在的非语法错误。一、启动和退出gdbgdb调试的对象是可执行文件,而不是程序的源代码。如果要使一个可执行文件可以被gdb调试,那么在使用编译器gcc编译程序时需要加入-g选项。-g选项告诉gcc在编译程序时加入调试信息,这样才可以调试这个被编译的程序。例:计算1100的和,应该输出5050# cat -n test.c 1 #include 2 3 int get_sum(int n) 4 5 int sum = 0, i; 6 for (i=0;in;i+) 7 sum +=i; 8 return sum; 9 10 11 int main() 12 13 int i = 100, result; 14 result = get_sum(i); 15 printf(1+2+.+%d=%dn,i,result); 16 return 0; 17 编译并运行该程序:# gcc -g test.c -o test# ./test1+2+.+100=4950(一)、调试一个程序的命令格式格式:gdb 例:#gdb test或 #gdb (gdb) file test(二)、退出 (gdb) quit二、显示和查找程序的源代码在调试时,一般要查看程序的源代码。list 命令用于列出程序的源代码,使用格式如下:l list 显示10行代码,若再次运行该命令则显示接下来的10行代码l list 5, 10 显示源代文件test.c中的第5行到第10行的代码,l list test.c:5,10 显示源文件test.c中第5行到第10行的代码,在调试含有多个源文件的程序时使用l list get_sum 显示get_sum函数周围的代码l list test.c:get_sum 显示源文件test.c中get_sum函数周围的代码,在调试含多个源文件的程序时使用l search 用来从当前行向后查找第一个匹配的字符串l reverse-search 用来从当前行向前查找第一个匹配的字符串三、执行程序和获得帮助使用gdb test或(gdb) fiel test只是装入程序,程序并没有运行,如果要使程序运行,在gdb提示符下输入run即可。(gdb) runStarting program: /tmp/test1+2+.+100=4950Program exited normally.如果想要详细了解gdb某个命令的使用方法,可以使用help命令(gdb)help list(gdb)help all四、设置和管理断点在调试程序时,往往需要程序在运行到某行、某个函数或某个条件发生时暂停下来,然后查看此时程序的状态,如各个变量的值、某个表达式的值等。为此,可以设置断点(break)。断点使程序运行到某个位置时暂停下来,以便检查和分析程序。1、 以行号设置断点在gdb中,大部分都是使用break命令为程序设置断点。而指定断点时,最常用的是为某行设置断点。例:(gdb) break 7Breakpoint 1 at 0x80483c0: file test.c, line 7. 然后我们输入run命令运行程序:(gdb) runStarting program: /tmp/testBreakpoint 1, get_sum (n=100) at test.c:77 sum +=i;可以看到,程序运行完第6行的指令后就暂停了,第7行的代码并没有执行而是被gdb的断点中断了。此时,我们可以查看各个变量和表达式的值,以了解程序的当前状态。2、以函数名设置断点在break命令后跟上函数名,就可以为函数设置断点。例:(gdb) break get_sumBreakpoint 1 at 0x80483aa: file test.c, line 5.(gdb) runStarting program: /tmp/testBreakpoint 1, get_sum (n=100) at test.c:55 int sum = 0,i;可以看到,程序在第5行停了上来。3、以条件表达式设置断点程序在运行过程中,当某个条件满足时,程序在某行中断暂停执行方法1 命令格式:break 行号或函数名 if 条件例:(gdb) clearDeleted breakpoint 1(gdb) break 7 if i=99Breakpoint 2 at 0x80483c0: file test.c, line 7.(gdb) runThe program being debugged has been started already.Start it from the beginning? (y or n) yStarting program: /tmp/testBreakpoint 2, get_sum (n=100) at test.c:77 sum +=i; 可以看到,运行程序后在i=99时,程序中断在第7行。方法2 watch 例:(gdb) watch i=99No symbol i in current context.(gdb) list 61 #include 23 int get_sum(int n)4 5 int sum = 0,i;6 for (i=0;in;i+)7 sum +=i;8 return sum;9 10(gdb) break 6Breakpoint 1 at 0x80483b1: file test.c, line 6. (gdb) runStarting program: /tmp/testBreakpoint 1, get_sum (n=100) at test.c:66 for (i=0;in;i+)Gdb运行后,以命令watch i=99设置条件断点,但是失败了,gdb提示在当前程序的上下文中没有符号i,这是因为此时test程序没有运行,变量i还没有被定义。为了解决这个问题,首先在第6行设置断点,然后使用run命令运行程序,程序暂停在第6行,此时第5行的语句已经被执行,所以变量i已经定义。这时就可以使用watch i=99设置断点了。4、查看当前设置的断点使用info breakpoints命令可以查看当前所有的中断点,例如:(gdb) break 7Breakpoint 1 at 0x80483c0: file test.c, line 7.(gdb) break 15 if result=5050Breakpoint 2 at 0x8048405: file test.c, line 15.(gdb) info breakpointsNum Type Disp Enb Address What1 breakpoint keep y 0x080483c0 in get_sum at test.c:72 breakpoint keep y 0x08048405 in main at test.c:15 stop only if result = 5050其中:Num 表示断点的编号 Type 说明类型,类型为breakpoint是指中断 Disp 指明中断点在生效一次后是否失去作用,是则为disp,不是则为keep End 说明中断点是否有效,有效则为y,无效则为n Address列 说明中断所处的内存地址 What列 列出中断发生在哪个函数的第几行 Stop only if result=5050 说明这是一个条件中断5、使中断失效或有效disable 可以使某个断点失效,程序运行到该断点时不会停下来而是继续运行enable 可以使某个断点恢复有效例:(gdb) info breakpointsNum Type Disp Enb Address What1 breakpoint keep y 0x080483c0 in get_sum at test.c:72 breakpoint keep y 0x08048405 in main at test.c:15 stop only if result = 5050(gdb) disable 2(gdb) info breakpointsNum Type Disp Enb Address What1 breakpoint keep y 0x080483c0 in get_sum at test.c:72 breakpoint keep n 0x08048405 in main at test.c:15 stop only if result = 5050(gdb) enable 2(gdb) info breakpointsNum Type Disp Enb Address What1 breakpoint keep y 0x080483c0 in get_sum at test.c:72 breakpoint keep y 0x08048405 in main at test.c:15 stop only if result = 50506、删除断点l clear 删除程序中所有的断点l clear 删除此行的断点l clear 删除该函数的断点l delete 删除指定编号的断点。如果一次要删除多个断点,各个断点编号以空格隔开例:(gdb) break 6Breakpoint 1 at 0x80483b1: file test.c, line 6.(gdb) break 7Breakpoint 2 at 0x80483c0: file test.c, line 7.(gdb) break 8 if sum=5050Breakpoint 3 at 0x80483cf: file test.c, line 8.(gdb) info breakpointsNum Type Disp Enb Address What1 breakpoint keep y 0x080483b1 in get_sum at test.c:62 breakpoint keep y 0x080483c0 in get_sum at test.c:73 breakpoint keep y 0x080483cf in get_sum at test.c:8 stop only if sum = 5050(gdb) clear 6Deleted breakpoint 1(gdb) info breakpointsNum Type Disp Enb Address What2 breakpoint keep y 0x080483c0 in get_sum at test.c:73 breakpoint keep y 0x080483cf in get_sum at test.c:8 stop only if sum = 5050(gdb) delete 2 3(gdb) info breakpointsNo breakpoints or watchpoints.7、display 在每次程序停在断点位置时,自动显示表达式中的内容8、commands 命令 end 结束命令输入作用:指定在程序到达断点位置时需要执行的调试器命令五、查看和设置变量的值当程序执行到中断点暂停执行时,需要查看变量或表达式的值,借此了解程序的执行状态1、 print命令作用:print命令一般用来打印变量或表达式的值,也可以用来打印内存中从某个变量开始的一段 存区域的内容,还可以用来对某个变量进行赋值。格式:print 打印变量或表达式的当前值,gdb会用伪变量($n)来保存输出值以备用 Print ; 对变量进行赋值 Print 打印以表达式值开始的n个数例:(gdb) break 7Breakpoint 4 at 0x80483c0: file test.c, line 7.(gdb) runStarting program: /tmp/testBreakpoint 4, get_sum (n=100) at test.c:77 sum += i;(gdb) print in 打印出in表达式的值,显然这个表达式为真,因此值为1$1 = 1(gdb) print i$2 = 0(gdb) print su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅行社与导游的劳动合同(合同范本)6篇
- 宾馆住宿餐饮跟高招合同范本5篇
- 2025LED广告屏制作合同协议
- 九年级化学上册 4.3 氧气说课稿 (新版)鲁教版
- 第一课 清明微雨思先人教学设计-2025-2026学年小学地方、校本课程辽海版人与社会
- 10.动物的脸教学设计-2023-2024学年小学美术四年级下册人美版(常锐伦、欧京海)
- 2025年乌鲁木齐市国企考试真题
- 2025工程监理安全责任合同
- 高中生物 第四章 第五节 关注人类遗传病说课稿 苏教版必修2
- 线缆厂应急处理管理规章
- 养老护理员中级考试题库2025年(附答案)
- 2024年河北石家庄交通投资发展集团有限责任公司招聘考试真题
- 2025年全球汽车供应链核心企业竞争力白皮书-罗兰贝格
- 2025年大学生英语六级必考词汇表全部汇编(带音标)
- 幼儿园大班安全教育:《暴力玩具不能玩》 课件
- 26个英文字母大小写描红
- 养老院预算及成本管理制度
- 研学旅行基地评估认定评分表
- DL∕T 1867-2018 电力需求响应信息交换规范
- 版良性前列腺增生诊疗指南PPT
- 眼睑基底细胞癌ppt课件
评论
0/150
提交评论