Linux C 的多文件编译


1、背景


本内容参照Linux c 软件工程师(C语言)实用教程
在设计开发大型程序时,如果把已经编写好的函数分别保存下来,以备应用在其他程序里面,可以提高程序的开发效率。
上面是书上说的话,实际程序肯定是这样的,把很多函数放在一个文件里,想想就头大。
下面就以实例说明怎么分别保存到不同的文件中。
实列要求是这样的:
设计一个程序,要求计算输入的整数的平均值,并将此程序分割成多个小文件。


2、实例


第一个文件


root@mkx:~/learn/mulitFile# cat main.c 
#include <stdio.h>
#include "cal.h"
int main()
{
 int i,j,k;
 printf("请输入第一个整数:");
 scanf("%d", &i);
 printf("请输入第二个整数:");
 scanf("%d", &j);
 k = max(i,j);
 printf("最大值是:%d\n", k);
 return 0;
}
root@mkx:~/learn/mulitFile# 

第二个文件


root@mkx:~/learn/mulitFile# cat cal.c
int max(int x, int y)
{
    if(x>y)
      return x;
    else
      return y;
}
root@mkx:~/learn/mulitFile# 

第三个文件


root@mkx:~/learn/mulitFile# cat cal.h 
int max(int x, int y);
root@mkx:~/learn/mulitFile# 

编译

root@mkx:~/learn/mulitFile# gcc main.c cal.c -o test1
root@mkx:~/learn/mulitFile# ./test1 
请输入第一个整数:3
请输入第二个整数:5
最大值是:5

3、总结与难点---链接阶段完成了函数实现的链接

过程是很简单,就是一个include cal.h头文件不就可以了吗?
那程序是如果找到cal.c里面的max函数的实现呢?
那是因为gcc会在当前路径找这些函数实现,这里就是在cal.o里面找到max的函数实现,然后,然后把声明的函数max与实现函数的max,链接起来,这就是链接阶段的任务。
当然,不仅找当前路径下的,还会去找系统的默认路径/usr/lib/下面找
这个,我以前也疑惑,其是怎么找到函数实现,其实,就是这样,一点一点查找的,然后再链接到声明,就这么简单。

猜你喜欢

转载自blog.csdn.net/maokexu123/article/details/126453808