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的更多相关文章

  1. js 取得 Unix时间戳(Unix timestamp)

    js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间19 ...

  2. 时间:UTC时间、GMT时间、本地时间、Unix时间戳

    转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...

  3. 简述unix时间戳

    unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix ti ...

  4. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)

    Java time JavaScript Math.round(new Date().getTime()/1000)getTime()返回数值的单位是毫秒 Microsoft .NET / C# ep ...

  5. Unix时间戳(Unix timestamp)转换工具

    http://tool.chinaz.com/Tools/unixtime.aspx 现在的Unix时间戳(Unix timestamp)是   1440732364         Unix时间戳( ...

  6. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?

    Java time JavaScript Math.round(new Date().getTime()/1000) 之所以除以1000是因为getTime()返回数值的单位是毫秒 Microsoft ...

  7. 不同语言的Unix时间戳

    如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)ge ...

  8. 在不同编程语言中对Unix时间戳进行转换(Unix timestamp)

    最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript ...

  9. 关于Unix时间戳

    如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)ge ...

随机推荐

  1. [置顶] API相关工作过往的总结之Sandcastle简要使用介绍

    Sandcastle介绍 在微软推出Sandcastle之前,人们倾向于选择开源的NDoc(.NET代码文档生成器).NDo可以将 C#.NET 编译生成的程序集和对应的 /doc XML文档,自动转 ...

  2. 基本NT式驱动代码结构

    #include <ntddk.h> void DriverUnload(IN PDRIVER_OBJECT DriverObject);NTSTATUS MyCreateClose(IN ...

  3. Spring 小示例

    通过一个简单的示例来初步理解Spring框架 1.创建java工程,导入相应Spring包,放在lib文件夹中 2.接口  IHelloMessage package com.jike.spring. ...

  4. Hive MapJoin

    摘要 MapJoin是Hive的一种优化操作,其适用于小表JOIN大表的场景,由于表的JOIN操作是在Map端且在内存进行的,所以其并不需要启动Reduce任务也就不需要经过shuffle阶段,从而能 ...

  5. Android Support库百分比布局

    之前写过一篇屏幕适配的文章Android 屏幕适配最佳实践,里面提到了类似百分比布局的东西,可是该方法缺点非常明显,就会添加非常多没用的数据,导致apk包变大. 而谷歌的support库中,添加了一个 ...

  6. [RxJS] Reactive Programming - Sharing network requests with shareReplay()

    Currently we show three users in the list, it actually do three time network request, we can verfiy ...

  7. Win7访问局域网内共享文件夹

    \\192.168.1.102\\IP地址

  8. .Net的PDF转图片

    用的是破解版的 O2S.Components.PDFRender4NET.dll 插件, 简单引用即可 public static class PdfToImage { , , ) { try { / ...

  9. js 闭包和回调

    原文:http://www.cnblogs.com/yuyuj/p/4525530.html 之前的工作都是基于老大搭建的框架,仿照他写的例子写的请求,很多东东也都做好了封装,只需要了解下直接调用就好 ...

  10. 配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写.  错误如图: 错误原因: 部署网站时,使用的应用程序池版本不对 ...