原创 1. Getting Started

2008-10-31 23:19 1921 0 分类: MCU/ 嵌入式

      所有书的第一章都是介绍性的,这本书也不例外,同时也编了所有编程书籍中最经典的例子hello.c


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


当然,重点不在这,而是下面的编译过程:


      &   gcc -o  hello hello.c


这句命令的意思是编译hello.c文件,生成名为hello的可执行文件。-o选项是用来指定生成文件的名字。这里生成的可执行文件就相当于windows下的.exe文件了,注意:linux下的可执行文件没有后缀,当然也可以加后缀,但是只是名字而已。


     执行hello:


    &  ./hello


     输出


    Hello World


很简单,不是吗?


再看看如何编写linux下的库文件。


先看看书中对库文件的定义:Libraries are collections of precompiled functions that have been written to be reusable.( 这里就不翻译了,保证原汁原味)系统中标准的库文件在/lib和/usr/lib里面。对库文件的命名linux也有自己的一套规则,以lib开头,接下来是的部分表示这个库的类型(比如c代表c库,m代表数学库),最后部分以点(.)加后缀,后缀有两种,如下:


                .a 代表是静态库


                .so代表是动态库


好了,看看下面这个例子。这个例子定义了两个函数fred.c和bill.c,然后生成一个库文件,在另外一个例子中调用这两个函数。


1.定义两个函数:


Here’s the first:
#include <stdio.h>
void fred(int arg)
{
      printf(“fred: we passed %d\n”, arg);
}

And here’s the second:
#include <stdio.h>
void bill(char *arg)
{
      printf(“bill: we passed %s\n”, arg);
}


2.编译:


$ gcc -c bill.c fred.c
$ ls *.o
bill.o fred.o


可以看到生成了两个.o文件。细心的朋友会注意到,gcc后面用了-c选项,意思是让编译器编译时只生产.o文件就停止编译了。


3.写一个lib.h头文件来申明这两个函数


void bill(char *);
void fred(int);


4.创建programm.c文件


#include <stdlib.h>
#include “lib.h”
int main()
{
     bill(“Hello World”);
     exit(0);
}


这个主函数中只调用了bill函数


5.编译并运行


$ 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
a - bill.o
a - fred.o


这时已经得到了libfoo.a,这个库文件中包含了bill和fred两个功能函数。执行:


$ gcc -o program program.o libfoo.a
$ ./program

bill: we passed Hello World
$


同样得到正确的结果。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /4 下一条