gcc、编译、生成静态库、可执行文件

(1)开发时,头文件(.h)中应当只放置“声明”,定义的内容应放入源文件(.c)中。

(2)生成静态库,可使用 ar crv命令;

(3)编译链接生成最终可执行文件时,可使用gcc的-l选项。

废话不说,先上例子:自己写两个c文件,分别用两个函数包装整数的加法和乘法,来个头文件包含这两个函数的声明,再来个main函数做入口,调用这两个函数。

此例中,将这两个c文件做成静态库。目录结构如下:

代码分别如下:

/* 文件: main.c */
#include <stdio.h>
#include "mylib.h"

int main(int argc, char *argv[]) {
	int a, b;
	printf("input>");
	scanf("%d %d", &a, &b);
	
	printf("add: %d\n", add(a, b));
	printf("multi: %d\n", multi(a, b));
	return 0;
}
/* 文件:add.c */
#include <stdio.h>

int add(int a, int b) {
	return a+b;
}
/* 文件: multi.c */
#include <stdio.h>

int multi(int a, int b) {
	return a * b;
}
/* 文件: mylib.h 
 * 这是头文件示例,应当只包含声明 
 */
int add(int, int);
int multi(int, int);

 如果不生成库文件,直接编译的操作步骤如下:

gcc -c main.c add.c multi.c    # 生成main.o, add.o, multi.o
gcc *.o -o main           # 这里生成可执行文件main

如果我们想采用生成库文件的方式操作,则步骤如下:

ar crv libcalc.a add.o multi.o    # 这里libcalc.a是生成的库文件名
gcc main.o libcalc.a -o main      # 直接编译出可执行文件main
# 上一步也可写成:
gcc main.o -o main -L. -lcalc

最后一条命令详细解释下,(1)因为我们生成的libcalc.a这个库文件不在Linux系统默认库文件路径下,因此用-L.选项告诉编译器在.目录找到它。(2)-lcalc告诉编译器要使用libcalc.a的静态库(或者libcalc.so的共享库),这里比较好玩的规则是,如果我们将库起名为libxxx.a(或libxxx.so),则链接时的命令就是-lxxx。

至于静态库和共享库的区别,网上有很多,这里就不赘述了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值