实验4-Linux编程环境熟悉_第1页
实验4-Linux编程环境熟悉_第2页
实验4-Linux编程环境熟悉_第3页
实验4-Linux编程环境熟悉_第4页
实验4-Linux编程环境熟悉_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验4-Linux编程环境helloworld/* hello.c */#include #include int main() printf(“Hello Worldn”); exit(0);编译和运行$gcc o hello hello.c-o选项表示指定目标生成文件$./helloHello World$shell默认是搜索PATH环境变量下的可执行程序,如果执行$hello, 且PATH并不包含当前目录,则shell就找不到可执行程序,可以通过echo $PATH查看当前该环境变量的值解决方法:采用$./hello, 即执行当前目录下的hello执行程序前修改当前窗口的PATH环境变量

2、使其包含当前目录,即PATH=$PATH:.export PATH=$PATH:.修改仅对当前窗口有效修改/etc/profile文件,在文件末尾添加export PATH=$PATH:.修改对所有用户都有效修改/.bashrc文件,在文件末尾添加export PATH=$PATH:.修改仅对当前用户有效表示当前登录用户的主目录1.可以用ls al看到隐藏文件.bashrc相关目录 应用程序 /usr/bin: 系统为正常使用提供的程序,包括用于程序开发的工具 /usr/local/bin:系统管理员为某个特定的主机或本地网络添加的程序gcc位于/usr/bin?gccgcc- 4.3 头文件

3、 /usr/include : 常用头文件 /usr/include/sys /usr/include/linux 依赖于特定linux版本的头文件 库文件 标准库文件/lib /usr/lib库文件 库文件必须遵循特定的命名规范,并且需要在命令行中明确指定 库文件的名称规范libXXX.a or libXXX.so 以lib开头 XXX指明库的内容,如c代表C语言库,m代表数学库 .a表示静态函数库,.so表示共享函数库gcc gcc包含预处理、编译、汇编、链接的过程 gcc -c| -S | -E -std =standard -g -pg -olevel-Wwarn -pedantic

4、-Idir -Ldir-Dmacro=defn -Umacro -foption -mmachine-option -o outfilefile infilegcc的主要option -E: 仅执行预处理,输出的是预处理后的源文件 -c: 不要执行链接,则输出的是汇编后的目标文件 -o outfile: 生成指定的输出文件,如不指定,则通常生成a.out -Idir: 指定额外的头文件搜索路径dir -Ldir: 指定额外的函数库搜索路径dir -llib: 连接时搜索指定的函数库lib $gcc I/usr/openwin/include fred.c $gcc o fred fred.c

5、/usr/lib/libm.a $gcc o fred fred.c lm $gcc o x11fred L/usr/openwin/lib x11fred.c lX11创建一个小型函数库/addvec.cvoid addvec(int *x, int *y, int *z, int n) int i; for(i = 0;in;i+) zi = xi+yi;/multvec.cvoid multvec(int *x, int *y, int *z, int n) int i; for(i = 0;in;i+) zi = xi*yi;/vector.hvoid addvec(int *x, i

6、nt *y, int *z, int n);void multvec(int *x, int *y, int *z, int n);/main.c#include #include “vector.h”int x2=1,2, y2=3,4, z2;int main() addvec(x, y, z, 2); printf(“z = %d, %dn”, z0, z1); return 0;include的区别 #include 与 #include “a.h”的不同 #include 首先搜索-I的编译选项目录 然后搜索INCLUDE环境变量指定的目录 最后搜索系统内定的搜索目录 /usr/in

7、clude /usr/local/include 可以用 gcc -print-prog-name=cc1 -v查看 #include “” 首先搜索当前文件的目录下的文件 其次搜索-I的编译选项给出的路径 再搜索INCLUDE环境变量的路径 最后搜索系统内定的搜索目录生成静态库并采用静态链接 gcc c addvec.c multvec.c 将addvec.c和mulvec.c编译成目标文件addvec.o和multvec.o ar crv libvector.a addvec.o multvec.o ar是打包工具,将两个目标文件打包成一个静态库文件libvector.a gcc -sta

8、tic -o p1 main.c -L. -lvector 采用静态库的方式编译main.c,在当前目录下搜索库文件libvector.a 或者:gcc -c main.c gcc -static -o p1 main.o ./libvector.a./p1 执行程序静态编译和链接过程生成共享库并采用动态链接 gcc -shared -o libvector.so addvec.c multvec.c 将addvec.c, multvec.c编译成共享库libvector.so gcc o p2 main.c -L. -lvector 编译main.c,指定目标输出文件是p2, 指定库搜索路径

9、为当前路径(.), 要链接的库为libvector export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/abyssoop/cprogram 如果直接执行./p2,可能会出现运行时无法载入库的错误 首先将LD_LIBRARY_PATH加上libvector.so所在的路径(注意:要将/home/abyssoop/cprogram替换成你们自己的库所在目录 可以使用echo $LD_LIBRARY_PATH查看当前动态链接库搜索路径 ./p2 执行程序动态链接过程比较静态链接和动态链接的区别 使用ls l列出p1和p2两个文件的详细信息 比较p1和p2的文件

10、大小gcc相关的几个环境变量 C_INCLUDE_PATH gcc找头文件的路径 除了默认头文件路径外,其它头文件搜索路径可以通过C_INCLUDE_PATH环境变量指定,也可以在每次使用gcc时通过-I 选项指定 CPLUS_INCLUDE_PATH g+找头文件的路径 LD_LIBRARY_PATH 找动态链接库的路径 LIBRARY_PATH 找静态链接库的路径 除了默认库文件搜索路径外,其它库文件搜索路径可以通过LIBRARY_PATH环境变量指定,也可以每次使用gcc时通过-L选项指定C+编译#include using namespace std;int main(void) co

11、ut“Hello world”endl; $g+ -o hello helloworld.c $./hello Hello World程序调试工具 gdb创建小型函数库/* fred.c */#include void fred(int arg) printf(“fred: we passed %dn”, arg);/* bill.c * /#include void bill(char *arg) printf(“bill: we passed %sn”, arg); $gcc c bill.c fred.c $ls *.obill.o fred.o/* lib.h */void bill(char *);void fred(int);/* program.c */#include #include “lib.h”int main() bill(“Hello World”); exit(0); $gcc c program.c $gcc o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论