C代码链接动静态库的链接

C代码链接动静态库的链接

这边勒,是本人第一次在网上写东西,用于总结,自己学习的知识

  • C编译过程
    通常初学在使用gcc编译器编译C程序时最常用的方法有两种gcc main.c
    这种方式会在当前路径下生成一个a.out文件(可执行)
china@ubuntu:~/share/lib$ ls
main.c
china@ubuntu:~/share/lib$ gcc main.c
china@ubuntu:~/share/lib$ ls
a.out  main.c
china@ubuntu:~/share/lib$

链接库首先需要建立库一下是对静态库与动态库的创建
库怎么来勒?就需要你创建你要链接的东西 (通常是函数)

china@ubuntu:~/share/lib$ ls
lib.c  lib.h  main.c
china@ubuntu:~/share/lib$

其中lib.c中是定义了一个函数
lib.h是lib.c的头文件
.c中的函数在lib.h中声明

介绍一个知识点:想要生成库 首先必须要将lib.c这个文件生成.o文件

china@ubuntu:~/share/lib$ ls
lib.c  lib.h  main.c
china@ubuntu:~/share/lib$ gcc -c lib.c
china@ubuntu:~/share/lib$ ls
lib.c  lib.h  lib.o  main.c
china@ubuntu:~/share/lib$ 

好的.o文件已经生成
接下来基于.o文件生成动静态库

  • 静态库
    使用指令
ar -crv libsum.a lib.o
china@ubuntu:~/share/lib$ ls
lib.c  lib.h  lib.o  libsum.a  main.c
china@ubuntu:~/share/lib$

好的静态库已经声明成功
其中必须注意:ar -crv libsum.a lib.o 中 lib表示库 sum是库名 .a为后缀

- 链接库

 lib.c  lib.h  lib.o  libsum.a  main.c
china@ubuntu:~/share/lib$ gcc main.c -o main -L. -I. -lsum
china@ubuntu:~/share/lib$ ls
lib.c  lib.h  lib.o  libsum.a  main  main.c

链接完成 生成可执行文件
注意:
1 main.c 里面一定要包含#include"lib.h"
2 -L. 表示L是必须要加的表示库 后面紧接着就是库的路径 由于我将libsum.a就是放在当前文件夹下的所以是 -L.
3 -I. 表示L是必须要加的表示头文件 后面紧接着就是头文件的路径 由于我将lib.h就是放在当前文件夹下的所以是 -I.
4 -lsum -l表示链接 sum表示库名

  • 动态库
    生成库的方法

```c
china@ubuntu:~/share/lib$ gcc -shared -fpic -o libsum.so lib.o
china@ubuntu:~/share/lib$ ls
lib.c  lib.h  lib.o  libsum.a  libsum.so  main  main.c
china@ubuntu:~/share/lib$ 

libsum.so  就是动态库

 - **链接动态库**
 链接动态库和使用动态库与使用静态库一致
 同时一定要注意注意事项
 **- 主要注意事项**
 可能你按照我的步骤 你都做了 但是他出现了
 ./a.out
 : error while loading shared libraries
 : libsum.so: cannot open shared object file
 : No such file or directory 


你需要以下操作

```c
sudo vim /etc/profile

打开文件之后将你的路径给添加到最后一行
例如:

export  PATH+$PATH:/home/china/share/lib

2021年3月28日 1:12
辛丑(牛)二月十六

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值