在Linux 下编译链接多个源文件

来源:互联网 发布:aes256加密算法 java 编辑:程序博客网 时间:2024/04/28 08:48

add.c 的内容

int Add(int a,int b)

{
   int result;
   result=a+b;
   return  result;
}

 

minus.c 的内容

 

int Minus(int a,int b)
{
  int result;
  result=a-b;
  return result;
}

all.c的内容

 

#include<stdio.h>
int main(void)
{
  int a=8;
  int b=3;
  printf("a=%d b=%d/n",a,b);
  int sum=Add(a,b);
  printf("a+b=%d/n",sum);
  int cha=Minus(a,b);
  printf("a-b=%d/n",cha);
  return 0;
}

 

把三个文件统一编译链接 进行处理 有这么几种方法

1 单个文件的编译最后统一链接

gcc -c all.c

gcc -c add.c

gcc -c minus.c

最后生成的是三个.o文件

gcc all.o add.o minus.o -o all  生成的是可执行文件all

 

2  三个文件一起编译链接

gcc add.c minus.c all.c -o all 生成的是可执行文件 all

 

3 先将add.c 和minus.c  生成.o文件 再生成库文件 对all.c进行编译链接

 

gcc -c add.c  minus.c   生成.o文件

 

ar rv libtest.a add.o minus.o   对.o文件生成libtest.a 库文件,将这个库文件拷贝到/usr/lib目录下,

 

gcc -o all all.c -ltest  对测试程序进行编译链接

 

最后生成可执行文件 all

 

 这里要注意的是生成的库文件名字和后来编译all.c时候使用的库文件要对应起来。上文中使用的是libtest.a  后面就使用-ltest。如果前面使用liball.a,后面就得使用-lall。  库文件的后缀暂时还是更改不了。


写的简单Makefile:

test:all.o add.o minus.o
 gcc -o all all.o add.o minus.o
all.o:all.c
 gcc -c all.c
add.o:add.c
 gcc -c add.c
minus.o:minus.c
 gcc -c minus.c
clean:
 rm -f  all.o add.o minus.o

保存成makefile,直接在当前目录下运行指令make

 

刚开始没有成功,把Makefile更改成文件a,直接运行make -f a 。指定a为Makefile便可以成功。

 

后来直接把文件名更改成了Makefile 便成功了。


1 0