Linux程序设计 读笔1
第一章 入门
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的更多相关文章
- Linux程序设计 读笔2 Shell脚本
第二章 Shell程序设计 四.管道和重定向 1 重定向输出 ls -l > lsoutput.txt ps >> lsoutput.txt >>表示附加到一个文件中 文 ...
- Linux程序设计 读笔3 文件操作
一 linux文件结构 二 系统调用和设备驱动程序 三 库函数 四 底层文件访问 五 标准IO库 六 格式化输入输出 七 文件和目录的维护 八 扫描目录 九 错误处理 十
- 6)Linux程序设计入门--消息管理
)Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V ...
- 3)Linux程序设计入门--文件操作
)Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...
- 7)Linux程序设计入门--网络编程
)Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...
- Linux程序设计(一)入门
1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...
- Linux 程序设计的一些优化措施
Linux 程序设计的一些优化措施 这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里 全局变量VS函数参数 全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR ...
- linux中读写锁的rwlock介绍-nk_ysg-ChinaUnix博客
linux中读写锁的rwlock介绍-nk_ysg-ChinaUnix博客 linux中读写锁的rwlock介绍 2013-02-26 13:59:35 分类: C/C++ http://yaro ...
- Linux程序设计之shell程序设计
看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...
随机推荐
- J2EE学习的一部分--JDBC详细说明
今天是关于我们JDBC相关知识,左右JDBC我想大家都很熟悉的,我记得在很早以前就开始使用它,我记得那是一个大二的学生做课程设计.但随后以完成任务,所以遇到的问题google,当时没有时间组织,下关于 ...
- linux 命令入门
1 linux 中,一切皆文件. 图片.MP3和视频,它们都是文件. 目录,是一种特殊的文件,其中包含其他文件的信息.磁盘驱动器则是真正的大文件了. 网络连接也是文件,甚至运行中的进程都是文件.这些都 ...
- ASP.NET程序代码优化的七个方面
ASP.NET程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比 ...
- APP安全测评checklist
leader不要打我啊,我要借用一下我组app的安全测评检查方案,这些最基本的安全防范措施应该是每个app都要注意的吧: 对了,首先,你的app得先混淆啊~:AndroidStudio 混淆打包 先来 ...
- WebStorm11 注册码
这个注册方法我也是在贴吧上看到的:http://tieba.baidu.com/p/4160766032 注册方法 注册时选择“License server”输入“http://15.idea.lan ...
- 屏蔽错误:LNK2038
最近在使用Qt(VS2010编译)的过程中,需要调用COM库,在Qt中加入了QAxContainer模块,是一个LIB库,在把编译模式从Debug改为Release 后链接报告了一堆错误 -1: 错误 ...
- CentOS快捷键总结
* 打开主菜单 = Alt + F1 * 运行 = Alt + F2 * 显示桌面 = Ctrl + Alt + d * 最小化当前窗口 = Alt + F9 * 最大化当前窗口 = Alt + F1 ...
- Python的基础--对象
对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- sql server 2008 (1)(2)
---恢复内容开始--- sql server 2008 (1) 系统数据库 master tempdb module 正文 数据库管理员(DBA)的一项基本的技能是对SQL数据库引擎的系统数据库的深 ...