第一章 入门

Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件

/bin             二进制文件目录,存放启动系统时用到的标准程序

/usr/bin           用户二进制文件目录,存放用户使用的标准程序

/usr/local/bin         本地二进制文件目录,存放软件安装的程序

/sbin和/usr/sbin       root用户使用,存放系统管理程序

/opt             存放可选的操作系统组件和第三方应用程序

第一个Linux程序:Hello World程序

hello.c

#include<stdio.h>
#include<stdlib.h> int main(){ printf( "Hello World\n" );
exit();
}

gcc -o hello hello.c

./hello 即可运行打印Hello World

Linux开发时一些重要的目录和文件介绍:

1 应用程序

一般在 /usr/bin 、/usr/local/bin、/opt中

2 头文件

一般在 /usr/include中

编译时可以使用-I标志来包含保存在子目录或者非标准位置中的头文件,如:gcc -I/usr/openwin/include fred.c

可以用grep命令搜索包含某些特定关键字的文件,如 grep EXIT_ *.h  在当前目录下所有以.h结尾的文件中搜索字符串EXIT_

3 库文件

库是一组预先编译好的函数的集合。   标准库文件一般位于/lib 和 /usr/lib中

库文件名字总是以lib开头,随后的部分指明是什么库(c代表C语言库,m代表数学库)。文件名的最后部分以.开始,然后给出库文件的类型:

  .a 代表 静态库

  .so 代表 共享库

可以通过给出完整的库文件路径名或用-l标志来告诉编译器要搜索的库文件:

  gcc -o fred fred.c /usr/lib/libm.a 等价于

  gcc -o fred fred.c -lm (-lm是简写方式,代表的是标准库目录中名为libm.a的函数库)

可以通过-L标志为编译器增加库的搜索路径:

  gcc -o x11fred -L/usr/openwin/lib x11fred.c -lX11    这条命令用/usr/openwin/lib目录中的libX11库来编译和链接程序x11fred

4 静态库

也称为归档文件,惯例一般以.a结尾

实验:创建自己的静态库,包含两个函数,然后在一个示例程序中调用其中的某一个函数

步骤1:为两个函数分别创建自己的源文件fred.c和bill.c,内容分别为:

fred.c

#include<stdio.h>

void fred( int arg ){

    printf( "fred: we passed %d\n", arg );
} bill.c #include<stdio.h> void fred( char* arg ){ printf( "fred: we passed %s\n", arg );
}

步骤2:分别编译这些函数以产生要包含在库文件中的目标文件

  gcc -c bill.c fred.c    -c选项是阻止编译器创建一个完整的程序,当然此时即使试图创建一个完整的程序也不会成功,因为fred.c和bill.c中尚未定义main函数

  此时当前目录下将会多两个文件 bill.o fred.o

步骤3:为库文件创建一个头文件

  起名lib.h(随便起的名字),lib.h将声明库文件中的函数签名。同时将lib.h包含在源文件fred.c和bill.c中是个好主意

  lib.h中内容如下:

    void bill( char* );

    void fred( int );

步骤4:编写调用bill函数的源程序program.c

#include<stdio.h>
#include"lib.h" //包含库的头文件!!! int main(){ bill( "Hello World" );
exit();
}

步骤5:编译并测试program.c了

  gcc -c program.c

  gcc -o program program.o bill.o

  ./program    输出: bill: we passed Hello World

步骤6:创建并使用一个库文件

  使用ar归档命令创建一个归档文件并将你的目标文件添加进去:

    ar crv libfoo.a bill.o fred.o    将两个目标文件使用ar命令归档到一个名为libfoo.a的静态库中去

步骤7:为函数库生成一个内容表(该步骤一般不需要,但做了也无妨),使用ranlib命令

  ranlib libfoo.a

至此为止,自己的库创建好了,可以如下使用:

gcc -o program program.o libfoo.a(或者写成gcc -o program program.c libfoo.a 或者写成  gcc -o program program.c -L. -lfoo 或者写成 gcc -o program -L. program.c -lfoo, -L.表示当前目录!

./program

Linux程序设计 读笔1的更多相关文章

  1. Linux程序设计 读笔2 Shell脚本

    第二章 Shell程序设计 四.管道和重定向 1 重定向输出 ls -l > lsoutput.txt ps >> lsoutput.txt >>表示附加到一个文件中 文 ...

  2. Linux程序设计 读笔3 文件操作

    一 linux文件结构 二 系统调用和设备驱动程序 三 库函数 四 底层文件访问 五 标准IO库 六 格式化输入输出 七 文件和目录的维护 八 扫描目录 九 错误处理 十

  3. 6)Linux程序设计入门--消息管理

    )Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V ...

  4. 3)Linux程序设计入门--文件操作

    )Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...

  5. 7)Linux程序设计入门--网络编程

    )Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...

  6. Linux程序设计(一)入门

    1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...

  7. Linux 程序设计的一些优化措施

    Linux 程序设计的一些优化措施 这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里 全局变量VS函数参数 全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR ...

  8. linux中读写锁的rwlock介绍-nk_ysg-ChinaUnix博客

    linux中读写锁的rwlock介绍-nk_ysg-ChinaUnix博客 linux中读写锁的rwlock介绍 2013-02-26 13:59:35 分类: C/C++   http://yaro ...

  9. Linux程序设计之shell程序设计

    看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...

随机推荐

  1. C#基础:事件(一) 【转】

    前面简要介绍了委托的基本知识,包括委托的概念.匿名方法.Lambda表达式等,现在讲讲与委托相关的另一个概念:事件. 事件由委托定义,因为事件的触发方(或者说发布方)并不知道事件的订阅方会用什么样的函 ...

  2. UMeditor 百度编辑器Mini学习

    准备开始研究百度的mini编辑器 1.4.3的昨天配置好了 ,也可以用了(.net 3.5) 为此我废了好大的力 研究了一天才弄好   结果今天一来上司就说 这个1.4.3 我们没必要用这么大的  用 ...

  3. javascript 兼容各个浏览器的事件

  4. .net 链接ORACLE的安装包

    odp.net.ma

  5. Angular-UI-Router

      原文  http://www.cnblogs.com/youngdze/p/4025538.html 主题 路由器JavaScript 路由 Route 为什么用 Route AJAX 请求不会留 ...

  6. 【.Net】从.NET平台调用Win32 API

    小序        Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微软留给我们直接控制 ...

  7. C# 运算符 if

    运算符: 一.算术运算符: + - * / % ——取余运算 取余运算的应用场景: 1.奇偶数的区分. 2.把数变化到某个范围之内.——彩票生成. 3.判断能否整除.——闰年.平年. int a = ...

  8. html css float left与 float right的使用说明

    点评: CSS中很多时候会用到浮动来布局,也就是经常见到的float:left或者float:right,简单点来说,前者是左浮动(往左侧向前边的非浮动元素飘,全是飘得元素的话,就按照流式来浮动从左到 ...

  9. Web页面在手机上显示过大问题

    网上抄来了,自己也备忘下:增加<meta name="viewport" content="width=device-width, initial-scale=1. ...

  10. [置顶] 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道

    一.过滤器 Linux中的应用工具分为三种: 交互工具 过滤器 编辑器 能够接受数据,过滤再输出的工具,称之为过滤器 对过滤器和进程,存在着输入源与输出对象 二.输入.输出.重定向 输入:过滤器的数据 ...