ubuntu下用Gcc编译器编译c语言的静态和动态链接库范例

本文介绍了如何在Ubuntu环境下,使用Gcc编译器将C语言源代码编译为静态库和动态库。首先,通过gcc将源文件编译为.o文件,然后创建静态库(.a文件)和动态库(.so文件)。创建静态库使用ar命令,动态库则需添加-fPIC选项。在使用库时,需要通过-L和-l选项指定库路径和名称。文章还讨论了头文件搜索路径、静态库与动态库的区别以及解决找不到库文件的方法。
摘要由CSDN通过智能技术生成

我在一个目录下新建hello.h hello.c main.c三个文件,我们需要将hello.c文件编译成静态库以及动态库。在存放文件目录下打开一个终端。

三个文件

hello.h(见程序1)为该函数库的头文件。
hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出”Hello XXX!”。
main.c(见程序3)为测试库文件的主程序,在主程序中调用了公用函数hello。

hello.h

#ifndef HELLO_H
#define HELLO_H

void hello(const char *name);
#endif

hello.c

#include <stdio.h>
#include <hello.h>

//这是要被编成函数库的,可以变成静态函数库和动态函数库
void hello(const char *name){
printf("hello %s.\n",name);
}

main.c

#include <stdio.h>
#include <hello.h>

int main(int argc , char *argv[])
{
    hello(every one);
    return 0;
}

linux下的库本质上来说是一种可执行代码的二进制形式,可以被操作系统载入内存执行,库有两种:静态库和共享库(动态库)。
二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。创建程序后静态库可以删除也没有影响。
共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。所以共享库搜索路径很重要,如果搜索不到,程序运行时候奔溃。
在linux下,库文件一般放在/usr/lib和/lib和/usr/local/lib下,
静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称
动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号

无论静态库,还是动态库,都是由.o文件创建的。因此我们必须将源程序hello.c通过gcc先编译成.o文件。

创建静态链接库

第一步就是将hello.c 编译为hello.o文件。
但是遇到第一个问题,就是说找不到hello.h文件。
有两个解决方法。
1、第一个用-I选项指明头文件的路径。如下表示hello.h在当前目录下。gcc -c -I ./ hello.c
2、在/etc/profile文件里面增加include路径搜索目录,<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值