美文网首页
linux:创建共享库

linux:创建共享库

作者: fck_13 | 来源:发表于2020-05-13 23:16 被阅读0次

先准备源码文件:
calc.h

#ifndef _CALC_H_
#define _CALC_H_

int add(int a, int b);

int sub(int a, int b);

int mul(int a, int b);

int div(int a, int b);

#endif

calc.c

#include "calc.h"

int add(int a, int b){
    return a+b;
}

int sub(int a, int b){
    return a-b;
}

int mul(int a, int b){
    return a*b;
}

int div(int a, int b){
    return a/b;
}

main.c

#include <stdio.h>
#include "calc.h"

int main(){
    int c = add(1,4);
    printf("%d\n", c);
    return 0;
}
  1. 编译库的源文件
gcc  -fPIC -c calc.c

fPIC:产生位置无关码,允许在任何地址加载
生成calc.o文件。

  1. 创建共享库
gcc -shared -Wl,-soname,libcalc.so.1 -o libcalcso.1.1 calc.o

-shared:生成共享库格式
-Wl:表示后面的参数将传给link程序ld

  • real name : 实际的完整的名称
  • so name:记录主版本号
  • link name:只是一个链接,在链接的时候使用
  1. 修改配置文件中动态库的路径
    这一步主要是为了编译器能够找到so文件的位置,因为生成的so文件在当前目录下,编译器并不知道,所以,需要修改一下配置文件
sudo vim /etc/ld.so.conf

将so文件所在的目录添加到配置文件中,为了使配置文件生效,还需要执行下面的命令

sudo ldconfig -v
  1. 使用动态库
gcc main.c -o main libcalc.so.1

然后执行./main,我们就看到执行的结果为5

  1. ldd 查看使用的库
    如果没有第三步,直接执行第四步的话,我们会得到如下的错误
./main: error while loading shared libraries: libcalc.so.1: cannot open shared object file: No such file or directory

使用ldd命令来查看所缺少的库,执行ldd mian,得到

linux-vdso.so.1 (0x00007fffcc2ef000)
libcalc.so.1 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef19900000)
/lib64/ld-linux-x86-64.so.2 (0x00007fef19e00000)

相关文章

  • linux:创建共享库

    先准备源码文件:calc.h calc.c main.c 编译库的源文件 fPIC:产生位置无关码,允许在任何地址...

  • Golang动态库编译

    一、Linux 查看程序或库文件所依赖的共享库列表

  • linux共享库

    linux环境下,库文件包含静态函数库和动态函数库两种: 静态函数库: 这类库的名字一般是libxxx.a;利用静...

  • linux共享库

    共享库: 1.概念 共享库就是动态链接库,是在程序运行的时候加载的函数库。详细介绍:https://blog.cs...

  • Linux下的静态库和动态库

    linux下的库: linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • 20_链接过程简介

    关键词:静态链接、Linux下静态库的创建和使用、动态链接、 Linux下动态库的创建和使用 1. 问题 工程中的...

  • 安卓项目中so库选择(ndk abiFilters设置,arme

    背景 Android 系统本质是一个经过改造的 Linux 系统,so库是Linux系统上使用的共享库(类似win...

  • Linux下的静态库、动态库和动态加载库

    作者 | P_Chou水冗 Linux库类型 Linux下可以创建两种类型的库: 静态库(.a): 在链接期间被应...

网友评论

      本文标题:linux:创建共享库

      本文链接:https://www.haomeiwen.com/subject/umbgnhtx.html