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. 用Nginx实现Session共享的均衡负载

    前言 大学三年多,也做个几个网站和APP后端,老是被人问到,如果用户多了服务器会不会挂,总是很尴尬的回答:“哈哈,我们的用户还少,到了服务器撑不住的时候,估计都上市了吧”.说是这么说,但是对于有强迫症 ...

  2. c语言for语句

    首先呢 for语句是由4部分组成 for(表达式1;表达式2;表达式3) 循环体: 注意 1:循环中的表达式用;隔开 表达式1通常用来呢赋初值 表达式2通常用来循环控制也就是循环条件 表达式3通常就是 ...

  3. 分页标签:pager-taglib使用指南

    一简介, Pager-taglib,支持多种风格的分页显示.实际上她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多种不一样的分页页面,风格各异,她自带 ...

  4. mysql 从data文件恢复数据库

    安装在D:\mysql\mysql-5.6.24-winx64下的mysql 由于系统坏了,移到另外一台机器上启动 步骤如下 1.复制以前的mysql安装文件及data文件下:2.全新安装mysql3 ...

  5. pyqt学习之列表管理器(网友提供)

    # -*- coding: utf-8 -*- __author__ = 'Administrator' import sys from PyQt4.QtCore import * from PyQt ...

  6. Html5 Canvas 实现滚动的图片

    今天一直在找html5 canvas的使用实例.想画一张地图,再画个小车在上面跑.运气好找到了一个大神写的js代码.该代码实现了图片的左右来回滚动,现在粘贴在博客里记录一下: <html> ...

  7. 用户控件(.ascx)与<ul><li>以及<a>布局之小结

    用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...

  8. [AngularJS] Transforming raw JSON data to meaningful output in AngularJS

    angular.module('APP', []) .controller('MainController', function($scope, UserConstants){ var user = ...

  9. 使用代码自定义UIView注意一二三

    文/CoderAO(简书作者)原文链接:http://www.jianshu.com/p/68b383b129f9著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 当一撮样式一样的视图在 ...

  10. Linux重装系统后SSH登录失败

    #Linux重装系统后SHH登录服务器报错 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE H ...