Linux环境下的C程序

learning Linux C

Posted by Jayn on February 6, 2016

while循环注意的事项

这个while循环比较蛋疼的是空格。使用的括号为中括号,括号和变量之间必须有空格,变量和比较符号之间也必须有空格,格式如下:

 
#!/bin/bash
Passwd=666666
echo 猜一下密码!
echo -n 输入密码:
read guss_passwd
while [ "$Passwd" != "$guss_passwd" ]
do
    echo 错误密码!
    echo -n 输入错误,请重新输入:
    read guss_passwd
done
echo 恭喜你,输入正确!
exit 0

Linux C程序设计中的几个关键问题

  1. 头文件:几乎所有的C语言的头文件都放在/usr/include及其子目录下,如stdio.h,stdlib.h等文件;
  2. 静态函数库:以.a结尾,如/usr/lib/libc.a是标准的C语言函数库
  3. 使用静态函数库有个问题,就是当很多程序都要用到某一个函数库的函数时,必须为每个程序都要复制一份同样的函数,浪费空间。因此,共享函数库解决了这一问题,Linux系统中,共享函数库存放在/lib中,典型的Linux中可以找到/lib/libc.so.N,N为主版本号。它是在程序运行时动态加载的,有点像.dll文件
  4. Linux下的文件名含义:
文件名类别(后缀名) 描述
.a 由目标文件构成的档案库文件
.o 编译后的目标文件
.i 经过预处理后的C的源代码文件
.ii 经过预处理后的C++的源代码文件

gcc编译器的使用

语法:gcc [选项] 文件列表

  • 选项 -o:用于指定生成的可执行文件的名字,而非默认的a.out,即如果不加-o选项,默认的可执行文件名称为a.out,常用的gcc选项:
选项 描述
-l 连接库文件
-m 根据给定的cpu类型优化代码
-o 指定可执行文件名称
-O[级别] 根据给定的级别(0-3)进行优化,数值越大,表明优化程度越高,级别0(默认)表示不优化
-c 只激活预处理,编译和汇编而跳过链接,生成目标文件(.o)
-static 禁止使用动态库

ar工具的使用

ar工具用于创建和修改库文件,它可以把指定的目标文件添加到库文件中(经过测试,发现直接添加源文件如.c也可以),库文件(又称归档文件)的名称必须以.a结尾,使用语法(关键字前面的-可加可不加): ar 关键字 文件名 [文件列表]

创建库文件的示例:ar r test_lib.a compute.o input.o 使用gcc连接库文件的实例:gcc main.c test_lib.a -o sqrt -lm 使用关键字q可以向库文件中添加其他的目标文件:ar q test_lib.a other.o, 把当前目录下所有目标文件添加到test_lib.a中:ar r test_lib.a *.o,如果test_lib.a不存在,则创建test_lib.a 显示库文件内容:ar t test_lib.a