unix c 01
gcc编译器(代码的 预处理/汇编/编译/连接)
C程序员一般写程序会定义 .c和.h两种文件
.c文件(源文件)中一般放代码的实现,.h文件(头文件)中放 各种声明和定义。
gcc -E __.c 只做预处理,可以生成.i文件
gcc -c __.c 只编译不连接,生成.o文件
gcc -S __.c 生成汇编,生成 .s文件
gcc __.c 预处理、编译和连接
gcc -o 指定目标文件名
gcc -E __.c -oxx.i 生成.i文件
gcc -Wall 可以显示更多的警告信息
C语言#include 查找头文件的途径:
1 ""会查找 当前目录(<>不查找)
2 gcc -I 指定的目录
3 系统目录(/usr/include等)
4 用环境变量
(CPATH/C_INCLUDE_PATH)配置的目录
#pragma 可以额外新增一些功能,
#pragma GCC dependency 文件名
比较更新时间,如果 文件名比当前文件新,产生警告
#pragma GCC poison 名字
这个名字将被禁用,否则 产生 错误
#pragma pack(正整数)
可以设置 结构体的对齐和补齐的单位
程序员可以把自己的代码打包成库文件,再提供一个头文件即可。
库文件包括静态库和共享库(动态库),静态库的使用方式 是代码的复制,共享库的使用方式 是函数指针(函数地址)。
静态库优点是 代码独立,效率稍好,缺点是 代码的空间太大,不利于修改和维护。
共享库优点是 代码空间较小,修改、维护比较方便,缺点是 代码依赖于共享库文件。
共享库的使用更加广泛。共享库 以.so结尾,静态库 以 .a结尾。
1 静态库的使用步骤
1.1 生成 静态库文件(.a)
a 写源代码
b 编译生成目标文件(.o)
c 使用ar -r 命令生成静态库文件
ar -r lib__.a __.o
1.2 调用静态库文件
前提:需要lib__.a和__.h文件
a 写调用源代码(test.c)
b 编译 (gcc -c)
c 连接静态库文件,有三种方法:
1) gcc __.o lib__.a (直接连接)
2) 配置环境变量 LIBRARY_PATH,把库文件所在路径配进去,然后用 gcc __.o -l__(库文件名)
3) gcc __.o -l__ -L库文件路径
2 共享库的使用步骤
2.1 生成 共享库文件(.so)
a 写源代码
b 编译生成目标文件(.o)
gcc -c -fpic __.c (-fpic可以不加)
c 生成共享库文件
gcc -shared __.o -o lib__.so
2.2 调用 共享库文件
和静态库一样
注:想运行共享库程序,必须配置LD_LIBRARY_PATH.
unix c 01的更多相关文章
- js 取得 Unix时间戳(Unix timestamp)
js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间19 ...
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...
- 简述unix时间戳
unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix ti ...
- 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)
Java time JavaScript Math.round(new Date().getTime()/1000)getTime()返回数值的单位是毫秒 Microsoft .NET / C# ep ...
- Unix时间戳(Unix timestamp)转换工具
http://tool.chinaz.com/Tools/unixtime.aspx 现在的Unix时间戳(Unix timestamp)是 1440732364 Unix时间戳( ...
- 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
Java time JavaScript Math.round(new Date().getTime()/1000) 之所以除以1000是因为getTime()返回数值的单位是毫秒 Microsoft ...
- 不同语言的Unix时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)ge ...
- 在不同编程语言中对Unix时间戳进行转换(Unix timestamp)
最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript ...
- 关于Unix时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)ge ...
随机推荐
- bzoj 1197
http://www.lydsy.com/JudgeOnline/problem.php?id=1197 我们考虑从低维向高维考虑. 记F[i][j]表示维度为i,用了j个球时最多能将空间划分为多少个 ...
- virtIO驱动安装
- Java Spring各种依赖注入注解的区别
Spring对于Bean的依赖注入,支持多种注解方式: @Resource javax.annotation JSR250 (Common Annotations for Java) @Inject ...
- chapter 2: Representing and manipulating information
C allows conversion between unsigned and signed. The rule is that the underlying bit representation ...
- 集成Dubbo服务(Spring)
Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo[]是 ...
- poj 2100 Graveyard Design(尺取法)
Description King George has recently decided that he would like to have a new design for the royal g ...
- JavaScript 数组中查找符合条件的值
数组实例的find方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员.如果没有符合条件的成员,则返回u ...
- (转)Android’s HTTP Clients
转载自:http://android-developers.blogspot.com/2011/09/androids-http-clients.html Most network-connected ...
- CATransform3D中m34字段的取值含义
转载自:http://zhidao.baidu.com/link?url=OlVQoGOKIBmaXKgQisOLtzliTLPvreOOsRmny3yebA1Wb6-B3KtuKlRXmv0tO3y ...
- seajs初尝 加载jquery返回null解决学习日志含示例下载
原文地址:http://www.tuicool.com/articles/bmuaEb 如需demo示例,请点击下方链接下载: http://yunpan.cn/cVEybKs8nV7CF 提取码 ...