【Linux】C语言动态库和静态库的制作和使用

简介: 【Linux】C语言动态库和静态库的制作和使用

静态库

mylib.c

#include <stdio.h>
void mylib_api(void);
void mylib_api(void)
{
  printf("mylib printf\r\n");
}

main.c

#include <stdio.h>
void mylib_api(void);
int main()
{
  mylib_api();
  return 0;
}

编译静态库

gcc -c mylib.c 
ar cr libmylib.a mylib.o

这里说明一下静态库分为静态库文件名和静态库名

libmylib.c是库文件名

mylib是库名

编译使用静态库的main.c

gcc main.c -lmylib -L ./

-l后面跟的是库名

-L后面跟的是静态库文件的路径这里的静态库文件就在本目录所以直接./

动态库

我们还是采用刚才的两个.c文件,编译动态库

gcc -c -fpic mylib.c
gcc -shared -o libmylib.so mylib.o

编译程序:使用静态库和动态库都是一样的编译方法

gcc main.c -lmylib -L ./ 

到这里我们可运行程序是生成了但是还是无法运行

因为他是属于动态加载的所以他在运行的时候需要找到这个库文件的位置,这里一共有三种方法

  • 1、将.so动态库文件放置在/lib或者/usr/lib文件夹,系统在运行是默认会去这两个文件夹寻找动态库文件

  • 2、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:这里跟我们动态库的路径;这种方法在commod窗口重启后失效

  • 3、将动态库的存放位置添加到环境变量中在/etc/ld.so.conf文件末添加动态库存放位置,添加完成使用ldconfig刷新生效



相关文章
|
6天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
4天前
|
存储 编译器 Linux
|
6天前
|
Linux vr&ar C语言
|
6天前
|
存储 Shell Linux
操作系统实战(一)(linux+C语言)
本篇文章重点在于利用linux系统的完成操作系统的实验,巩固课堂知识
|
6天前
|
存储 Linux 编译器
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
|
6天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
23 2
|
6天前
|
存储 Linux 编译器
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
16 0
|
4天前
|
C语言
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
18 0
|
4天前
|
C语言
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
6 0
|
23小时前
|
C语言 C++
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
5 0