Unix-linux环境高级C语言——开发环境

Unix操作系统

美国AT&T公司贝尔实验室,1971年,肯.汤普逊、丹尼斯.里奇。 
PDP-11,多用户、多任务、支持多种处理器架构,高安全性、高可靠性,高稳定性。 
 既可构建大型关键业务系统的商业服务器应用,也可构建面向移动终端、手持设备等的嵌入式应用。 

Linux操作系统

类Unix操作系统,免费开源,不同发行版本使用相同内核。 
 手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型计算机、超级计算机。 
 严格意义上的Linux仅指操作系统内核,隶属于GNU工程,发明人Linus Torvalds。 

构建(Build)过程

编辑 -> 预编译 -> 编译 -> 汇编 -> 链接
1) 编辑: vi hello.c -> hello.c
2) 预编译:gcc -E hello.c -o hello.i -> hello.i -+
3) 编译: gcc -S hello.i -> hello.s | GCC
4) 汇编: gcc -c hello.s -> hello.o | 工具链
5) 链接: gcc hello.o -o hello -> hello -+

文件后缀

1..h  - C语言源代码头文件
2..c  - 预处理前的C语言源代码文件
3..i  - 预处理后的C语言源代码文件
4..s  - 汇编语言文件
5..o  - 目标文件
6..a  - 静态库文件
7..so - 共享库(动态库)文件

编译单个源程序

gcc [选项参数] 文件
2.-c        - 只编译不链接
3.-o        - 指定输出文件
4.-E        - 预编译
5.-S        - 产生汇编文件
6.-pedantic - 对不符合ANSI/ISO C语言标准的
7.            扩展语法产生警告
8.-Wall     - 产生尽可能多的警告。
9.            范例:gcc -Wall wall.c
10.-Werror   - 将警告作为错误处理。
11.            范例:gcc -Werror werror.c
12.-x        - 指定源代码的语言。
13.            范例:gcc -x c++ cpp.c -lstdc++
14.-g        - 生成调试信息
15.-O1/O2/O3 - 优化等级

编译多个源程序

gcc [选项参数] 文件1 文件2 …


•头文件的作用是什么
1) 声明外部变量、函数和类。
2) 定义宏、类型别名和自定义类型。
3) 包含其它头文件。
4) 借助头文件卫士,防止因同一个头文件被多次包含,而引发重定义错。


•包含头文件时需要注意的问题
1) gcc的-I选项 
 指定头文件附加搜索路径。
2) #include <…> 
先找-I指定的目录,再找系统目录。
3) #include "…" 
先找-I指定的目录,再找当前目录,最后找系统目录。
4) 头文件的系统目录 
/usr/include 
 /usr/local/include 
 /usr/lib/gcc/i686-linux-gnu/4.6.3/include 
 /usr/include/c++/4.6.3 (C++编译器优先查找此目录)


环境变量

1.C_INCLUDE_PATH     - C头文件的附加搜索路径,相当于gcc的-I选项
2.CPATH              - 同C_INCLUDE_PATH
3.CPLUS_INCLUDE_PATH - C++头文件的附加搜索路径
4.LIBRARY_PATH       - 链接时查找静态库/共享库的路径
5.LD_LIBRARY_PATH    - 运行时查找共享库的路径

创建静态库

1) 编辑源程序:.c/.h
2) 编译成目标文件:gcc -c xxx.c -> xxx.o
3) 打包成静态库文件:ar -r libxxx.a xxx.o …
ar指令:ar [选项] 静态库文件名 目标文件列表 
-r - 将目标文件插入到静态库中,已存在则更新 
-q - 将目标文件追加到静态库尾 
-d - 从静态库中删除目标文件 
-t - 列表显示静态库中的目标文件 
-x - 将静态库展开为目标文件 
注意:提供静态库的同时也需要提供头文件

创建共享库

1) 编辑源程序:.c/.h
2) 编译成目标文件:gcc -c -fpic xxx.c -> xxx.o
3) 链接成共享库文件:gcc -shared xxx.o … -o libxxx.so

辅助工具

nm: 查看目标文件、可执行文件、静态库、共享库中的符号列表。
ldd: 查看可执行文件和共享库的动态依赖。
ldconfig: 共享库管理。 
 事先将共享库的路径信息写入/etc/ld.so.conf配置文件中,ldconfig根据该配置文件生成/etc/ld.so.cache缓冲文件,并将该缓冲文件载入内存,借以提高共享库的加载效率。 
 系统启动时自动执行ldconfig,但若修改了共享库配置,则需要手动执行该程序。
strip: 减肥。去除目标文件、可执行文件、静态库和共享库中的符号列表、调试信息等。
objdump: 显示二进制模块的反汇编信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值