闇の光

读书笔记 经验感受

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这是我在我另一个部落格上写的东西,由于怎么着都觉得那个那里貌似不太适合发学习方面的东西,所以还是转移阵地到这里好了。我会将其他的学习方面的东西依次转移到此。

找了一本有关Linux编程的书,书名:<<Beginning Linux Programming,Fourth Edition>>,先看着,给自己一个基本的了解。虽然是英文版本,每天读的不多,但可以给我一个英文的环境,不至于以后一碰到英文文档,头就大。

现在只看了第一章,主要介绍了下本书今后的侧重,顺带着了解了下Linux下C语言的编译。这个以前看过一些,知道一点皮毛,虽然时间有点长,记忆有些混乱。不过还是有一点点新鲜的东西,这让我有点眼前一亮的感觉。

首先是gcc在调用库文件时,用到路径的方面以及库文件名缩写的小tips,都是比较有趣的。比如,我们要调用/usr/lib下的libm.a这个库文件:

#gcc -o foo foo.c -L /usr/lib -lm

从上面可以看到,使用了-L和-l这两个选项,是不是很有意思呢!

接下来,是创建自己私人的库文件,这个以前只是知道有这么回事,但具体怎么操作,那我还真是一点头绪也没有。步骤如下:

  • a. 创建两个文件: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 bill(char *arg){

    printf("bill:we passed %s\n",arg);

    }

    编译这两个文件:

    $gcc -c fred.c bill.c

    生成fred.o和bill.o这两个文件。

  • b. 书写包含这两个目标文件的头文件,比如lib.h,文件内容如下:
    /*This is lib.h. It declares the functions fred and bill for users.

    */void bill(char *);

    void fred(int);

  • c. 编写调用这两个目标文件的程序代码,比如program.c,文件内容如下:
    #include <stdlib.h>

    #include "lib.h"

    int main(){

    bill("Hello World");

    exit(0);

    }

  • d. 编译program.c文件,命令如下:
    $gcc -c program.c

    $gcc -o program program.o bill.o

    $./program

    执行结果如下: bill: we passed Hello World

  • e. 创建自己个人的库文件libfoo.a,命令如下:
    $ar crv libfoo.a bill.o fred.o

    库文件创建完之后,运行载入该库文件,非必须,建议操作。命令如下:

    $ranlib libfoo.a
  • f. 使用新生成的库文件来连接编译program.c,命令如下:
    $gcc -o program program.o libfoo.a

    也可以这样:

    $gcc -o program program -L . -lfoo

    最后一点小tip,用来查询你的程序都用到了哪些lib文件,命令如下:

    $ldd program
  • posted on 2008-03-05 14:38  taizi  阅读(236)  评论(0编辑  收藏  举报