我是靠谱客的博主 甜甜白云,最近开发中收集的这篇文章主要介绍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: %dn", add(a, b));
	printf("multi: %dn", 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。

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

最后

以上就是甜甜白云为你收集整理的gcc、编译、生成静态库、可执行文件的全部内容,希望文章能够帮你解决gcc、编译、生成静态库、可执行文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部