美文网首页
Linux学习:02-生成动态库和静态库

Linux学习:02-生成动态库和静态库

作者: 放纵的卡尔 | 来源:发表于2020-06-23 23:43 被阅读0次

linux中制作动静态库

add.c mul.c main.c 文件如下:
tinychan@ubuntu:~/Desktop/gcc$ cat add.c  mul.c main.c
//
// Created by tinychan on 4/25/20.
//
int add(int a,int b){
    return a+b;

}



//
// Created by tinychan on 4/25/20.
//
int mul(int a,int b){
    return a*b;

}


#include <stdio.h>
#include "add.h"
#include "mul.h"
int main() {

    int sum=add(1,2);
    int result=mul(2,3);
    printf("HelloWorld! %d ,%d\n",sum,result);
#ifdef DE_DEBUG
    printf("DET_DEBUG\n");
#endif

    return 0;
}

制作静态库:

1.生成.o文件

gcc -c *.c -I ./include/

2.生成静态库

ar rcs libmath.a *.o

3.使用静态库

gcc main.c -I ./include/ -L ./ -lmath

制作动态库

1.生成与位置无关的.o 文件

gcc -fPIC -c

2.生成so文件

3.使用so

tinychan@ubuntu:~/Desktop/gcc$ gcc -fPIC -c *.c -I ./include/
tinychan@ubuntu:~/Desktop/gcc$ gcc -shared -o libmath.so -I ./include/ *.o
tinychan@ubuntu:~/Desktop/gcc$ gcc main.c -o app -I ./include/ -L ./ -lmath 
tinychan@ubuntu:~/Desktop/gcc$ ./app
./app: error while loading shared libraries: libmath.so: cannot open shared object file: No such file or directory
tinychan@ubuntu:~/Desktop/gcc$ pwd
/home/tinychan/Desktop/gcc
tinychan@ubuntu:~/Desktop/gcc$ gcc main.c -o app.out -I ./include/ -L ./ -lmath -Wl,-rpath /home/tinychan/Desktop/gcc
tinychan@ubuntu:~/Desktop/gcc$ ls
add.c  add.o  app  app.out  include  lib  libmath.so  main.c  main.o  mul.c  mul.o
tinychan@ubuntu:~/Desktop/gcc$ ./app.out
HelloWorld! 3 ,6

说明: cannot open shared object file: No such file or directory . linux默认lib\user下的库文件中需找so,需要配置动态库的路径,可以使用-Wl,-rpath 或者设置环境变量.

环境变量配置法如下(但是建议使用-Wl,-rpath)
指定方法:

    1. 环境变量法:export LD_LIBRARY_PATH=./ 将当前目录加入环境变量,但是终端退出了就无效了。

    2. 配置文件法:将上条写入家目录下.bashrc文件中    (永久生效,设置到~/.bashrc)

    3. 拷贝法:直接将libmymath.so文件拷贝到/usr/lib/目录下。(受libc库的启发)

    4. 缓存文件法:将libmymath.so所在绝对路径加入到/etc/ld.so.conf文件,

       使用sudo ldconfig -v 动态更新/etc/ld.so.cache文件(2进制文件)

相关文章

  • Linux动态库

    深入探讨Linux静态库与动态库的详解(一看就懂)Linux下动态库的生成和使用Linux下动态库生成和使用转-u...

  • linux下静态库和动态库创建和使用

    linux静态库 .a ===== win 静态库 .lib linux动态库 .so ==== win动态库 ....

  • Linux学习:02-生成动态库和静态库

    linux中制作动静态库 add.c mul.c main.c 文件如下: 制作静态库: 1.生成.o文件 gc...

  • Linux链接库

    动态链接库(共享链接库) 杂项 生成.o文件 生成.so 使用动态库 静态链接库 杂项 生成.a 查看.a 使用静态库

  • 2020-10-07

    Linux学习4 Linux下制作和使用静态库和动态库[https://www.cnblogs.com/WindS...

  • linux下静态库 动态库和 gcc gdb Makefile

    一、静态库和动态库 定义 根据链接时期的不同,库有静态库和动态库之分。 静态库是在链接阶段被链接的,所以生成的可执...

  • iOS 静态库和动态库的制作

    静态库和动态库 一、静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和...

  • 动态链接库和静态链接库

    动态库和静态库 在Win下,动态库以.dll结尾,静态库以.lib结尾。 在Linux下,动态库文件以.so结尾,...

  • c语言第四讲 动态库、静态库

    静态库和动态库的生成 静态库 静态库就是一些目标文件的集合,一般以.a结尾,使用于生成可执行文件阶段。链接器将库文...

  • Linux下的静态库和动态库

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

网友评论

      本文标题:Linux学习:02-生成动态库和静态库

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